Выберите значение XML, используя идентификатор в XSLT - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь преобразовать XML-документ, используя XSLT-преобразование, и мне было интересно, возможно ли получить XML-элемент, имеющий значение другого атрибута.

<Question>
<text id="154014">Email</text>
<answer>123@gmail.com</answer>
</Question>

<Question>
<text id="154015">Phone</text>
<answer>123456</answer>
</Question>

Поэтому мой вопрос заключается в том, что если у меня есть текст / @ id значение как 154014 Мне нужно получить ответ 123@gmail.com

Я не могу использовать <xsl:value-of select="text[@id='154014']" />, потому что это будетвзять не нужный элемент xml.

Спасибо

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Еще один способ добиться этого - с помощью клавиши .Определите ключ следующим образом: для поиска Question элементов по text/@id

 <xsl:key name="questions" match="Question" use="text/@id" />

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

<xsl:value-of select="key('questions', '15184')/answer" />

Или используйте параметр вместо жестко заданного значения

<xsl:value-of select="key('questions', $id)/answer" />

См. http://xsltfiddle.liberty -development.net / nc4NzRv

0 голосов
/ 04 декабря 2018

Попробуйте с этим.

<xsl:for-each select="Question">
    <xsl:variable name="id" select="text/@id"/>
    <xsl:choose>
        <xsl:when test="$id='154014'">
            <xsl:value-of select="answer"/>
        </xsl:when>
    </xsl:choose>
</xsl:for-each>
0 голосов
/ 04 декабря 2018

он даст вам желаемый результат:

//text[@id = '154014']/following-sibling::answer ИЛИ //Question[text[@id = '154014']]/answer ИЛИ //text[@id = '154014']/../answer

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