我正在使用XSLT通过删除一些节点来执行XML到XML。我是XSLt的新手,这让人感到困惑。
XML输入,
<?xml version="1.0" encoding="UTF-8"?>
<role>
<status>success</status>
<data>
<name>ac1</name>
</data>
<data>
<name>ac2</name>
</data>
<data>
<name>ac3</name>
</data>
<day>monday</day>
</role>
XSLT是,
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="utf-8" indent="yes" />
<xsl:template match="role">
<xsl:copy>
<xsl:for-each select="data">
<disaply_name>
<xsl:value-of select="name" />
</disaply_name>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
输出是,
<?xml version="1.0" encoding="utf-8"?>
<role>
<disaply_name>ac1</disaply_name>
<disaply_name>ac2</disaply_name>
<disaply_name>ac3</disaply_name>
</role>
预期输出是,
<?xml version="1.0" encoding="utf-8"?>
<root>
<role2>
<disaply_name>ac1</disaply_name>
</role2>
<role2>
<disaply_name>ac2</disaply_name>
</role2>
<role2>
<disaply_name>ac3</disaply_name>
</role2>
</root>
我应该修改什么? .......................
答案 0 :(得分:1)
您对<xsl:copy>
的使用意味着它正在复制当前节点,在本例中为<role>
,这解释了它在输出中的外观。由于之前没有指定其他节点,因此XSLT将其视为根节点。所以我刚删除它,并正确放置了节点<root>
和<role2>
。
要获得预期的输出,请尝试使用以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="utf-8" indent="yes" />
<xsl:template match="role">
<root>
<xsl:for-each select="data">
<role2>
<display_name>
<xsl:value-of select="name" />
</display_name>
</role2>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
这是我得到的输出:
<?xml version="1.0" encoding="utf-8"?>
<root>
<role2>
<display_name>ac1</display_name>
</role2>
<role2>
<display_name>ac2</display_name>
</role2>
<role2>
<display_name>ac3</display_name>
</role2>
</root>