Доступ к узлам XML с использованием XPath - PullRequest
0 голосов
/ 01 декабря 2010
<attributes>
  <attribute name="Mail Zone" property="alerts.p45" type="">
    <value>mailzone</value>
  </attribute>
  <attribute name="Employee Name" property="acm_alert_custom_attributes.cs11" type="">
    <value>employeename</value>
  </attribute>
  <attribute name="Manager Name" property="alerts.p23" type="">
    <value><managername></value>
  </attribute>

Как я могу выбрать узел <value> на основе атрибута "name" указанного выше XML с использованием XPath?

1 Ответ

6 голосов
/ 02 декабря 2010

Допустим, вы хотите выбрать элемент value, который является дочерним по отношению к attribute, имя которого - «Имя сотрудника».

Выражение XPath для этого следующее:

/attributes/attribute[@name="Employee Name"]/value

В XSL вы можете использовать его так:

<xsl:value-of select="/attributes/attribute[@name='Employee Name']/value"/>

Он построен следующим образом. Сначала вы хотите выбрать атрибут value, родитель которого является элементом attribute, родитель которого является корнем (я предполагаю) attributes. Оператор / указывает отношения родитель-потомок между элементами. Таким образом, выражение для выбора всех value элементов будет следующим:

/attributes/attribute/value

Исходя из этого, вы хотите отфильтровать результат по некоторому другому атрибуту. В этом случае вы хотите фильтровать по атрибуту name элемента attribute (выбор имен может затруднить отслеживание). Фильтрация выполняется с помощью предложений [] для элементов, по которым вы хотите выполнить фильтрацию. В вашем случае это элемент attribute:

/attributes/attribute[]/value 

Теперь вам нужно что-то положить в фильтр. Символ @ указывает атрибуты элемента, по которому вы фильтруете, за которым следует имя нужного атрибута. Затем вы сравниваете атрибут с некоторым известным значением, чтобы получить приведенное выше выражение:

/attributes/attribute[@name='filter']/value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...