我有一些XML,我试图转换为更容易理解的XML文件。我遇到的问题是元素和属性名称在它们的末尾有数字。我能够得到第一级元素:
<xsl:template match="*[starts-with(name(), 'node')]" name="reports">
我也可以为 section1 创建模板,但我不知道如何在模板中访问其region *属性。这就是原始XML的样本:
<node01>
<report>
<section1 region1="World">
...
</section1>
<section2 region2="EU">
...
</section2>
<report>
<node01>
我希望输出看起来像:
<reports>
<report>
<region>
<name>World</name>
...
</region>
<region>
<name>EU</name>
...
</region>
<report>
<reports>
答案 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="*"/>
<xsl:template match="/node01">
<reports>
<xsl:apply-templates/>
</reports>
</xsl:template>
<xsl:template match="report">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[starts-with(name(), 'section')]">
<xsl:apply-templates select="@*"/>
</xsl:template>
<xsl:template match="@*[starts-with(name(), 'region')]">
<region>
<name><xsl:value-of select="."/></name>
</region>
</xsl:template>
</xsl:stylesheet>
这是另一个:
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:template match="/*">
<reports>
<xsl:for-each select="report">
<xsl:copy>
<xsl:for-each select="*/@*">
<region>
<name><xsl:value-of select="."/></name>
</region>
</xsl:for-each>
</xsl:copy>
</xsl:for-each>
</reports>
</xsl:template>
</xsl:stylesheet>