新年快乐,
我需要使用标题级元素值重置行级元素值。下面是输入XML和预期输出XML,我们非常感谢任何指导。我尝试了几种模板匹配的方法,但我无法产生预期的结果。
输入:
<Products>
<Company>ABC</Company>
<City>Pandora</City>
<Product>
<Name>Avatar</Name>
<MadeInCity>New York</MadeInCity>
</Product>
<Product>
<Name>Titanic</Name>
<MadeInCity>San Francisco</MadeInCity>
</Product>
....
</Products>
输出:
<Products>
<Company>ABC</Company>
<Product>
<Name>Avatar</Name>
<MadeInCity>Pandora</MadeInCity>
</Product>
<Product>
<Name>Titanic</Name>
<MadeInCity>Pandora</MadeInCity>
</Product>
....
</Products>
如上所示,我想在下面使用XSL进行操作
以下是我的尝试
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Products/Product/MadeInCity">
<value>
<xsl:choose>
<xsl:when test="Products/City">
<xsl:value-of select="Products/City"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</value>
</xsl:template>
</xsl:stylesheet>
- 谢谢你
答案 0 :(得分:1)
我会这样做:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- if City exists, replace the value of MadeInCity -->
<xsl:template match="/Products[City]/Product/MadeInCity">
<xsl:copy>
<xsl:value-of select="/Products/City"/>
</xsl:copy>
</xsl:template>
<!-- remove City -->
<xsl:template match="City"/>
</xsl:stylesheet>