我有以下xml:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<row>
<first-name>John</first-name>
<last-name>Miller</last-name>
<address>Birmingham</address>
</row>
<row>
<first-name>Rose</first-name>
<last-name>Miller</last-name>
<address>New York</address>
</row>
</root>
我想使用XSLT修改xml,输出如下:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<row>
<Name>John-Miller</Name>
<address>Birmingham</address>
</row>
<row>
<Name>Rose-Miller</Name>
<address>New York</address>
</row>
</root>
总结一下,我希望连接<first-name>
和<last-name>
以生成一个名为<Name>
的新节点,并保持<address>
标记不变(同样的事情应该发生)在每个<row>
)。
我正在尝试使用以下XSLT,但没有获得所需的输出:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
<xsl:template match="row">
<row>
<Name>
<xsl:value-of select="concat(//first-name,'-',//last-name)" />
</Name>
</row>
</xsl:template>
</xsl:stylesheet>
当我针对输入xml运行上面的XSLT时,我只得到第一行的<first-name>
和<last-name>
值。
你能提供解决方案吗?
答案 0 :(得分:2)
您需要使用相对路径,这意味着您需要将<xsl:value-of select="concat(//first-name,'-',//last-name)" />
替换为<xsl:value-of select="concat(first-name,'-',last-name)" />
。而且你需要确保复制地址:
<xsl:template match="row">
<row>
<Name>
<xsl:value-of select="concat(first-name,'-',last-name)" />
</Name>
<xsl:copy-of select="address"/>
</row>
</xsl:template>