XPath: как проверить несколько атрибутов на похожих узлах - PullRequest
1 голос
/ 09 июня 2010

Если у меня есть xml вроде:

    <root>
   <customers>
        <customer firstname="Joe" lastname="Bloggs" description="Member of the Bloggs family"/>
        <customer firstname="Joe" lastname="Soap" description="Member of the Soap family"/>
        <customer firstname="Fred" lastname="Bloggs" description="Member of the Bloggs family"/>
        <customer firstname="Jane" lastname="Bloggs" description="Is a member of the Bloggs family"/>
   </customers>
 </root>

Как получить в чистом XPath, а не в XSLT, выражение xpath, которое определяет строки с одинаковыми фамилиями, но с другим описанием? Так что это будет тянуть последний узел выше?

Ответы [ 2 ]

1 голос
/ 10 июня 2010

Как мне получить, в чистом XPath - не XSLT - выражение xpath, которое определяет строки с одинаковыми фамилиями, но имеет другое описание?

Вот как это сделать с помощью одного выражения XPath :

   "/*/*/customer
        [@lastname='Bloggs'
       and
        not(@description
           = preceding-sibling::*[@lastname='Bloggs']/@description
            )
        ]"

Это выражение выбирает все элементы <customer> с атрибутом lastname, равным "Bloggs" и другим значением атрибута description.

Выбранные узлы:

<customer firstname="Joe" lastname="Bloggs" description="Member of the Bloggs family"/>
<customer firstname="Jane" lastname="Bloggs" description="Is a member of the Bloggs family"/>
0 голосов
/ 10 июня 2010
/root/customers/customer[@lastname='Bloggs'
  and not(@description = preceding-sibling::*[@lastname='Bloggs']/@description)
  and not(@description = following-sibling::*[@lastname='Bloggs']/@description)]

Было бы лучше делать это шаг за шагом.

...