Xslt代码,用于根据输入中给出的id值获取名称值

时间:2014-11-22 15:09:16

标签: xml xslt

xslt的输入是:

<input>
   <id>456</id>
   <class>1</class>
</input> 

下面是存储在本地文件中的xml代码,我需要将输入id值与下面文件中出现的id值进行比较,并获取相关id值的名称值。

<details>
    <data>
        <id>12</id>
        <name>apple</name>
    </data>
    <data>
        <id>34</id>
        <name>orange</name>
    </data>
</details>

我编写的示例XSLT代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="text"/>
   <xsl:variable name="consumerInfoDoc" select="document('local:///details.xml')"/>
   <xsl:variable name="InputId" select="//id"/>
   <xsl:variable name="Id" select="$consumerInfoDoc/details/information/id/text()"/>
   <xsl:if test="$InputId=$Id">
      <xsl:value-of select=" "/>
   </xsl:if>
</xsl:stylesheet>

我编写的上述代码是示例代码,请更正并提供完整代码。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

这个怎么样:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="text"/>
   <xsl:variable name="consumerInfoDoc" select="document('local:///details.xml')"/>

   <xsl:template match="/*">
      <xsl:variable name="inputId" select="id" />
      <xsl:variable name="matchData"
                    select="$consumerInfoDoc/details/data[id = $inputId]" />
      <xsl:value-of select="$matchData/name" />
   </xsl:template>
</xsl:stylesheet>

答案 1 :(得分:0)

您可以使用以下XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="consumerInfoDoc" select="document('local:///details.xml')"/>
<xsl:template match="/input">
    <xsl:value-of select="$consumerInfoDoc/details/data[id = current()/id]/name"/>
</xsl:template>
</xsl:stylesheet>

模板匹配/input(文档节点下的根元素),因此正在处理的当前节点为input。 在xsl:value-of的XPath中,即$consumerInfoDoc/details/data[id = current()/id]/name,第一个id(在过滤器表达式中)实际上是$consumerInfoDoc/details/data/idcurrent()/id/input/id。 这意味着当前节点不会随XPath而改变。您正在将其他文档的id与输入文档的input/id进行比较..