在我的XSLT上获取Root元素未设置错误。
XML输入:
<?xml version="1.0" encoding="utf-8"?>
<Customer count="1">
<Record id="123">
<Data id="123-00">John Smith</Data>
</Record>
<Record id="456">
<Data id="123-00">Mark Doe</Data>
</Record>
</Customer>
所需的输出:
<Customer>
<Record>
<Name>John Smith<Name>
</Record>
<Record>
<Name>Mark Doe</Name>
</Record>
</Customer>
到目前为止我所拥有的:
<xsl:template match="/Customer/Record">
<xsl:for-each select="Data">
<Customer>
<Record>
<Name><xsl:value-of select="@id='123-00'"/></Name>
</Record>
</Customer>
</xsl:for-each>
</xsl:template>
我尝试了没有for循环代码的情况,并将template match="/"
与value-of select="Customer/Record/Name[@id='123-00']"
一起使用,它可以工作。但是我知道这不是最好的编码方式。
答案 0 :(得分:2)
如果要将Data
元素转换为Name
元素并删除任何属性,请使用
<xsl:template match="Data">
<Name>
<xsl:value-of select="."/>
</Name>
</xsl:template>
对于其他元素,您似乎想复制它们而不包含它们的属性,因此添加模板
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
答案 1 :(得分:0)
要使您的代码产生所需的输出,您需要:
Customer
而不是Record
; Customer
元素移至xsl:for-each
指令的外部; Data
节点的实际值(现在只有布尔测试):
<xsl:template match="/Customer">
<Customer>
<xsl:for-each select="Record">
<Record>
<Name>
<xsl:value-of select="Data[@id='123-00']"/>
</Name>
</Record>
</xsl:for-each>
</Customer>
</xsl:template>