我有以下xml
<myRequest>
<id>123456789</id>
</myRequest>
我有以下xslt无法与输出
相同<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes" encoding="ISO-8859-1" version="1.0"
omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="myRequest">
<myRequest>
<xsl:apply-templates select="id"/>
</myRequest>
</xsl:template>
<xsl:template match="id">
<customerId>
<xsl:value-of select="id"/>
</customerId>
</xsl:template>
</xsl:stylesheet>
工作xslt
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes" encoding="ISO-8859-1" version="1.0"
omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="myRequest">
<myRequest>
<xsl:apply-templates select="//id"/>
</myRequest>
</xsl:template>
<xsl:template match="id">
<customerId>
<xsl:value-of select="//id"/>
</customerId>
</xsl:template>
</xsl:stylesheet>
我把current()放在XWatch中,当调试指针在
时它也没有显示任何东西<xsl:template match="myRequest">
<myRequest>
..........................
为什么我需要在这里使用 // ?因为 id 元素直接位于 myRequest 下。我真的很困惑使用 / / 在这里?
不使用 // ,我们也需要获得输出。
我在这里做的错误是什么?
提前致谢...
答案 0 :(得分:1)
您的第一个模板需要看起来像这样......
<xsl:template match="id">
<customerId>
<xsl:value-of select="."/>
</customerId>
</xsl:template>
xsl:value-of
中的表达式将相对于您所在的当前节点(id
)节点,因此通过执行<xsl:value-of select="id" />
,您正在查找名为{{1}的节点这是当前id
元素的子元素。执行id
获取当前节点的值。
执行.
是有效的,因为当您使用//id
启动表达式时,它将相对于顶级文档节点,然后执行/
将搜索第一个//
在文档中的任何地方。
请注意,请考虑在XSLT标识模板上构建XSLT,因为这将使其更通用,并且能够在文档中的任何位置更改id
元素。
试试这个XSLT
id