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>
我编写的上述代码是示例代码,请更正并提供完整代码。 提前谢谢。
答案 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/id
,current()/id
是/input/id
。
这意味着当前节点不会随XPath而改变。您正在将其他文档的id与输入文档的input/id
进行比较..