在XSLT中使用ID选择XML值

时间:2018-12-04 15:23:40

标签: java xml pdf xslt

我正在尝试使用XSLT转换来转换XML文档,并且想知道是否有可能获得具有另一个属性值的XML元素。

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

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

所以我的问题是,如果我的 text / @ id 值为 154014 ,我需要获取答案 123@gmail.com < / p>

我不能使用<xsl:value-of select="text[@id='154014']" />,因为它将使用不需要的xml元素。

谢谢

3 个答案:

答案 0 :(得分:3)

实现此目标的另一种方法是使用key。像这样定义一个键,以通过Question

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

然后要获取ID的相关答案,请执行此操作...

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

或者,使用参数代替硬编码值

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

请参见http://xsltfiddle.liberty-development.net/nc4NzRv

答案 1 :(得分:2)

它将为您提供所需的输出:

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

答案 2 :(得分:0)

尝试一下。

<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>