有人能帮我满足以下要求吗。如果publisher/catalog/cd11/年可用/存在,则需要创建一个有值的新元素,作为publisher/directory/cd22="new Release"
谢谢,提前
输入XML:
<publisher>
<Name id="d123">
<Location>Chicago</Location>
</Name>
<catalogue id="d1" >
<cd11 id="d2">
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<year>1985</year>
</cd11>
</catalogue>
<catalogue id="d3" >
<cd11 id="d4">
<title>Jurassic World</title>
<artist>Chris Pratt</artist>
</cd11>
</catalogue>
</publisher>
转换:如果publisher/catalog/cd11路径中存在"year"元素,则应创建<cd22>New Release</cd22>
输出XML:
<publisher>
<Name id="d123">
<Location>Chicago</Location>
</Name>
<catalogue id="d1" >
<cd11 id="d2">
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<year>1985</year>
</cd11>
<cd22>New Release</cd22>
</catalogue>
<catalogue id="d3" >
<cd11 id="d4">
<title>Jurassic World</title>
<artist>Chris Pratt</artist>
</cd11>
</catalogue>
</publisher>
只需使用标识转换,然后覆盖(匹配)所有具有子代cd11/year
的catalogue
元素。
在我的示例中,我检查year
是否不为空,但如果重要的话,您可以更改它。
XSLT 2.0
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="catalogue[string(cd11/year)]">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<cd22>New Release</cd22>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>