Выражение Xpath, получающее текст родительского элемента - PullRequest
0 голосов
/ 13 июня 2011
<books>
  <physics id="abcd"> Book1 </physics>
  <maths> Book2 </maths>
  <history id="pqrs">Book3 </history>
</books>

Это выражение xpath:

select=".//@ID"

даст мне все узлы, имеющие идентификатор. Оттуда мне нужно пойти родительский узел и получить текст в нем.

В приведенном выше примере мне нужно получить физику, историю в качестве ответов. Какое выражение xpath может дать мне такой результат?

Ответы [ 2 ]

0 голосов
/ 13 июня 2011

Если вы хотите отсканировать весь документ, выберите один из них:

//*[@id]/text()
//*[@id]/node()

С //*[@id] вы получите все узлы элементов, имеющие атрибут с именем id.

С text() вы получаете только текстовые узлы;с node() вы получите все дочерние узлы.

0 голосов
/ 13 июня 2011

Попробуйте это :

//*[@id]/text()

//*[@id] выберет любой элемент, имеющий атрибут @id. text() даст вам дочерние текстовые узлы этого элемента.


Edit:

Чтобы получить имя узла с атрибутом @id, используйте функцию name() в XSLT. См. Этот пример :

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" />

    <xsl:template match="/">
        <books>
            <xsl:for-each select="//@id">
                <book><xsl:value-of select="name(..)" /></book>
            </xsl:for-each>
        </books>
    </xsl:template>

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