我有实体,其中包含名称,类型和数字元素。不幸的是,它以我不想要的格式呈现。我不允许修改呈现该实体的代码。我唯一能做的就是创建一个XSL文件,将我的输入转换为理想的输出。
假设我们有3个实体。 XML文件以错误的模式显示它们。它显示第一个实体的名称,第二个的名称,然后是第三个的名称。相同的模式适用于类型和数字。它显示第一个实体的类型,第二个的类型,然后是第三个实体的类型等。
我想以更合理的模式输出实体,例如 1st 的名称, 1st 的类型, 1st 实体的编号。接下来是 2nd 的名称, 2nd 的类型, 2nd 实体的编号等等。我还要将每个这些元素被称为实体。
因此,例如,我将如何转换以下XML输入
<root>
<Name>Harambe</Name>
<Name>John Smith</Name>
<Name>Mazda</Name>
<Type>Ape</Type>
<Type>Human</Type>
<Type>Car</Type>
<Number>1111</Number>
<Number>2222</Number>
<Number>3333</Number>
</root>
进入这个:
<root>
<Entity>
<Name>Harambe</Name>
<Type>Ape</Type>
<Number>1111</Number>
</Entity>
<Entity>
<Name>John Smith</Name>
<Type>Human</Type>
<Number>2222</Number>
</Entity>
<Entity>
<Name>Mazda</Name>
<Type>Car</Type>
<Number>3333</Number>
</Entity>
</root>
答案 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:template match="/root">
<xsl:copy>
<xsl:for-each select="Name">
<xsl:variable name="i" select="position()" />
<Entity>
<xsl:copy-of select=". | following-sibling::Type[$i] | following-sibling::Number[$i]"/>
</Entity>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>