Использование составных предикатов XPath для поиска XML-сообщения - PullRequest
1 голос
/ 19 октября 2010

У меня возникают проблемы с выяснением того, как выбирать данные с помощью составного запроса XPath, чтобы я мог по существу найти 5-й столбец строки в моих данных.Вот мой пример XML:

<sample>
 <OBX>
   <field position="1">1</field>
   <field position="2">My Value</field>
 </OBX>
 <OBX>
   <field position="1">2</field>
   <field position="2">My other (and more important) value</field>
 </OBX>
</sample>

По сути, все, что мне нужно сделать, это найти значение [field @ position = '2'], когда [field @ position = '1'] равно 2.Я пытаюсь:

OBX[./field[@position='1']='2']/field[@position='2']

, но это не имеет никакого значения.Каков будет правильный способ добиться этого?

Спасибо,

Майк

1 Ответ

1 голос
/ 19 октября 2010

Я проверил, что это выражение XPath :

/*/OBX[field[@position='1']='2']/field[@position='2']

при сравнении с предоставленным документом XML:

<sample>
 <OBX>
   <field position="1">1</field>
   <field position="2">My Value</field>
 </OBX>
 <OBX>
   <field position="1">2</field>
   <field position="2">My other (and more important) value</field>
 </OBX>
</sample>

выбирает нужный узел

Вот демонстрация с использованием XSLT в качестве языка хостинга XPath:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:copy-of select="/*/OBX[field[@position='1']='2']/field[@position='2']"/>
 </xsl:template>
</xsl:stylesheet>

при этом преобразованииприменяется к предоставленному документу XML, получается правильный результат :

<field position="2">My other (and more important) value</field>
...