Xslt 查找元素的唯一子节点
需要编写一个xslt文件。以下是输入文件:Xslt 查找元素的唯一子节点,xslt,Xslt,需要编写一个xslt文件。以下是输入文件: <assets> <item> <child1>some text</child1> <child2>some text</child2> <child3>some text</child3> <child4>some text</child4> <
<assets>
<item>
<child1>some text</child1>
<child2>some text</child2>
<child3>some text</child3>
<child4>some text</child4>
</item>
<item>
<child1>some text</child1>
<child2>some text</child2>
<childx>some text</childx>
</item>
<item>
<child1>some text</child1>
<childx>some text</childx>
<childy>some text</childy>
<childz>some text</childz>
</item>
</assets>
一些文本
一些文本
一些文本
一些文本
一些文本
一些文本
一些文本
一些文本
一些文本
一些文本
一些文本
我需要找出资产/项目的所有唯一子名称。元素(项)下的子项数量和子项名称是动态的
输出应如下所示:
<item>
<columns>
<columnname>child1</columnname>
<columnname>child2</columnname>
<columnname>child3</columnname>
<columnname>child4</columnname>
<columnname>childx</columnname>
<columnname>childy</columnname>
<columnname>childz</columnname>
</columns>
</item>
孩子1
孩子2
孩子3
孩子4
切尔克斯
孩子气的
奇尔兹
您可以在元素名称上使用以下内容:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="elements" match="*" use="local-name()" />
<xsl:template match="/">
<item>
<xsl:apply-templates select="assets/item" />
</item>
</xsl:template>
<xsl:template match="item">
<xsl:for-each select="*[count(.|key('elements', local-name())[1]) = 1]">
<columnname>
<xsl:value-of select="name()"/>
</columnname>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
你会得到这个:
<item>
<columnname>child1</columnname>
<columnname>child2</columnname>
<columnname>child3</columnname>
<columnname>child4</columnname>
<columnname>childx</columnname>
<columnname>childy</columnname>
<columnname>childz</columnname>
</item>
孩子1
孩子2
孩子3
孩子4
切尔克斯
孩子气的
奇尔兹
您可以使用此
<xsl:key name="child" match="item/*" use="name()"/>
<xsl:template match="/">
<item>
<columns>
<xsl:for-each select="//item/*[count(.|key('child', name())[1]) = 1]">
<columnname><xsl:value-of select="name()"/></columnname>
</xsl:for-each>
</columns>
</item>
</xsl:template>
输出
<item>
<columns>
<columnname>child1</columnname>
<columnname>child2</columnname>
<columnname>child3</columnname>
<columnname>child4</columnname>
<columnname>childx</columnname>
<columnname>childy</columnname>
<columnname>childz</columnname>
</columns>
</item>
孩子1
孩子2
孩子3
孩子4
切尔克斯
孩子气的
奇尔兹
到目前为止,您尝试过什么?请告诉我们一些代码片段Stack Overflow不是一个代码编写服务,您应该尝试自己编写代码。我建议您对您的问题进行一些研究(可能尝试页面顶部的搜索框),并尝试自己编写一些代码。如果/当您在代码中遇到任何问题,请再次询问并解释您尝试了什么,以及为什么它不适合您。请参阅,以获得有关提问的帮助。