XPath, чтобы выбрать детей конкретных детей и родителей - PullRequest
0 голосов
/ 16 июля 2009

Вот моя структура:

<AllCharges>
   <Charge>
     <ID>1</ID>
     <Type>A</Type>
   </Charge>
   <Charge>
     <ID>2</ID>
     <Type>A</Type>
   </Charge>
   <Charge>
     <ID>3</ID>
     <Type>B</Type>
   </Charge>
</AllCharges>

Что я хочу вернуть, так это полную структуру, но мне нужны только результаты, в которых Type = A. Трудная часть, которую я нахожу, это откат родительских узлов xml. Вот пример того, как должен выглядеть мой результат:

<AllCharges>
   <Charge>
     <ID>1</ID>
     <Type>A</Type>
   </Charge>
   <Charge>
     <ID>2</ID>
     <Type>A</Type>
   </Charge>
</AllCharges>

Я бы предположил, что XPath будет выглядеть примерно так, но он не работает: / AllCharges [// Type = A]

Возможно ли это?

Ответы [ 2 ]

4 голосов
/ 16 июля 2009
/AllCharges/Charge[Type='A']

Это должно сделать это.

Выражение гласит: «Выберите любой элемент Charge, родительским элементом которого является AllCharges, имеющий дочерний элемент с именем Type, текстовое значение которого равно« A »».

Протестировано в следующем XSLT-шаблоне:

<xsl:template match="/">
  <AllCharges>
    <xsl:copy-of select="/AllCharges/Charge[Type='A']"/>
  </AllCharges>
</xsl:template>

Вывод был:

<AllCharges>
  <Charge>
    <ID>1</ID>
    <Type>A</Type>
  </Charge>
  <Charge>
    <ID>2</ID>
    <Type>A</Type>
  </Charge>
</AllCharges>
2 голосов
/ 16 июля 2009

xpath не изменяет XML, он просто возвращает результаты в вашем XML-документе. Вы можете искать все элементы 'начисления' с типом = a, чтобы получить то, что вы хотите.

Если вы хотите преобразовать документ, вам нужно взглянуть на XSL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...