<Products>
<Product ProductID="1">
<productName>Ball</productName>
<Color>Green</Color>
</Product>
<Product ProductID="2">
<productName>Doll</productName>
<Color>White</Color>
</Product>
</Products>
我有一个像上面这样的xml输入。但我在创建产品名称为属性且产品ID为product.below下的元素的产品元素时遇到问题。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="//Products">
<html>
<body>
<Products>
<xsl:for-each select="//Product">
<xsl:call-template name="Import"/>
</xsl:for-each>
</Products>
</body>
</html>
</xsl:template>
<xsl:template name="Import" match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
我相信你可以通过以下方式实现:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="//Products">
<html>
<body>
<Products>
<xsl:apply-templates />
</Products>
</body>
</html>
</xsl:template>
<xsl:template match="Product">
<xsl:element name="product">
<xsl:attribute name="name" select="ProductName/text()" />
<xsl:element name="productID">
<xsl:value-of select="@ProductID" />
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
顺便说一下,输入XML中有一个小错误(productName
没有大写字母)
答案 1 :(得分:0)
更改
<xsl:template match="//Products">
<html>
<body>
<Products>
<xsl:for-each select="//Product">
<xsl:call-template name="Import"/>
</xsl:for-each>
</Products>
</body>
</html>
</xsl:template>
到
<xsl:template match="Products">
<html>
<body>
<Products>
<xsl:apply-templates/>
</Products>
</body>
</html>
</xsl:template>
然后写一个模板
<xsl:template match="Product">
<product name="{ProductName}">
<xsl:apply-templates select="@ProductID"/>
</product>
</xsl:template>
和模板
<xsl:template match="Product/@ProductID">
<productID>
<xsl:value-of select="."/>
</productID>
</xsl:template>