我有一个xml,如下面的代码段。 “all-attribs”元素是表的唯一列的总数。 “attrib”元素将成为每行的列。我想要做的是使用“all-attribs”填写缺失的元素..
我不是很擅长这个,但我真的尽力解决它。 我设法创建正确数量的单元格并匹配应填充的单元格,但我不知道如何在“name”元素中引入数据,因为我正在使用for-each循环来设置上下文“all-attribs”(我希望你理解我的意思)。
XML:
<root>
<all-attribs>
<attrib>first</attrib>
<attrib>second</attrib>
<attrib>third</attrib>
<attrib>fourth</attrib>
<attrib>fifth</attrib>
</all-attribs>
<items>
<item>
<attrib handle="first">
<name>First</name>
</attrib>
<attrib handle="third">
<name>Third</name>
</attrib>
<attrib handle="fifth">
<name>Fifth</name>
</attrib>
</item>
<item>
<attrib handle="second">
<name>Second</name>
</attrib>
<attrib handle="fourth">
<name>Fourth</name>
</attrib>
</item>
<item>
<attrib handle="first">
<name>First</name>
</attrib>
<attrib handle="fifth">
<name>Fifth</name>
</attrib>
</item>
</items>
</root>
期望的结果:
<root>
<items>
<item>
<attrib>First</attrib>
<attrib/>
<attrib>Third</attrib>
<attrib/>
<attrib>Fifth</attrib>
</item>
<item>
<attrib/>
<attrib>Second</attrib>
<attrib/>
<attrib>Fourth</attrib>
<attrib/>
</item>
<item>
<attrib>First</attrib>
<attrib/>
<attrib/>
<attrib/>
<attrib>Fifth</attrib>
</item>
</items>
</root>
答案 0 :(得分:0)
怎么样:
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:apply-templates select="items/item"/>
</xsl:copy>
</xsl:template>
<xsl:template match="item">
<xsl:copy>
<xsl:variable name="item" select="." />
<xsl:for-each select="/root/all-attribs/attrib">
<attrib>
<xsl:value-of select="$item/attrib[@handle=current()]/name" />
</attrib>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>