我试图在循环中打印多次出现的值,其中一个值的标头标记与另一个不同。 child3 标签的数量可能比 child1 标签多,但第三次出现的 child3 标签将被忽略,因为只有两次出现的 child1 标签可用。
<?xml version="1.0" encoding="UTF-8"?>
<Parent1>
<Parent2>
<child1>JOHN ONE</child1>
<child1>JOHN TWO</child1>
<child2>JACK ONE</child2>
<child2>JACK TWO</child2>
</Parent2>
<child3>JAMES ONE</child3>
<child3>JAMES TWO</child3>
<child3>JAMES THREE</child3>
</Parent1>
我尝试过的代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="Parent1">
<Children >
<child1>
<xsl:value-of select="Parent2/child1" />
</child1>
<child2>
<xsl:value-of select="Parent2/child2" />
</child2>
<child3>
<xsl:value-of select="child3" />
</child3>
</Children>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我得到的实际输出:
<Children>
<child1>JOHN ONE</child1>
<child2>JACK ONE</child2>
<child3>JAMES ONE</child3>
</Children>
预期输出是:
<Children>
<child1>JOHN ONE</child1>
<child2>JACK ONE</child2>
<child3>JAMES ONE</child3>
</Children>
<Children>
<child1>JOHN TWO</child1>
<child2>JACK TWO</child2>
<child3>JAMES TWO</child3>
</Children>
使用给定的输入,可以使用以下方法产生预期的输出:
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="/Parent1">
<xsl:for-each select="Parent2/child1">
<xsl:variable name="i" select="position()" />
<Children>
<xsl:copy-of select="."/>
<xsl:copy-of select="../child2[$i]"/>
<xsl:copy-of select="/Parent1/child3[$i]"/>
</Children>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
请注意,输出是 XML 片段,而不是格式良好的 XML 文档。