XSLT将平面树结构转换为列表
我有一个描述eshop树结构的xml文件,我只需要获得所有子组的列表。 我不知道结构中有多少父/子级别。 输入xml如下所示: '''XSLT将平面树结构转换为列表,xslt,tree,Xslt,Tree,我有一个描述eshop树结构的xml文件,我只需要获得所有子组的列表。 我不知道结构中有多少父/子级别。 输入xml如下所示: ''' 1. 0 汽车 2. 0 工具 1001 1. 河流浅水处 1002 1. 丰田 5. 2. 斧头 1150 1001 灵魂 1151 1001 猛禽 ''' 输出应该看起来像所有子组的简单列表,结构并不重要,排序也不重要。 ''' 1. 1001 1002 1150 1151 2. 5. ''' 您能告诉我要转换哪些函数或过程吗?以下是一种方法: XS
1.
0
汽车
2.
0
工具
1001
1.
河流浅水处
1002
1.
丰田
5.
2.
斧头
1150
1001
灵魂
1151
1001
猛禽
'''
输出应该看起来像所有子组的简单列表,结构并不重要,排序也不重要。
'''
1.
1001
1002
1150
1151
2.
5.
'''
您能告诉我要转换哪些函数或过程吗?以下是一种方法: XSLT1.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:key name="child" match="item" use="parent_id"/>
<xsl:template match="items">
<groups>
<xsl:for-each select="item[parent_id=0]">
<group>
<ID>
<xsl:value-of select="id" />
</ID>
<xsl:apply-templates select="key('child', id)"/>
</group>
</xsl:for-each>
</groups>
</xsl:template>
<xsl:template match="item">
<Child_ID>
<xsl:value-of select="id" />
</Child_ID>
<xsl:apply-templates select="key('child', id)"/>
</xsl:template>
</xsl:stylesheet>
使用格式良好的(!)输入,例如:
XML
<items>
<item>
<id>1</id>
<parent_id>0</parent_id>
<name>Cars</name>
</item>
<item>
<id>2</id>
<parent_id>0</parent_id>
<name>Tools</name>
</item>
<item>
<id>1001</id>
<parent_id>1</parent_id>
<name>Ford</name>
</item>
<item>
<id>1002</id>
<parent_id>1</parent_id>
<name>Toyota</name>
</item>
<item>
<id>5</id>
<parent_id>2</parent_id>
<name>Axe</name>
</item>
<item>
<id>1150</id>
<parent_id>1001</parent_id>
<name>Ka</name>
</item>
<item>
<id>1151</id>
<parent_id>1001</parent_id>
<name>Raptor</name>
</item>
</items>
1.
0
汽车
2.
0
工具
1001
1.
河流浅水处
1002
1.
丰田
5.
2.
斧头
1150
1001
灵魂
1151
1001
猛禽
这将产生:
结果
<?xml version="1.0" encoding="UTF-8"?>
<groups>
<group>
<ID>1</ID>
<Child_ID>1001</Child_ID>
<Child_ID>1150</Child_ID>
<Child_ID>1151</Child_ID>
<Child_ID>1002</Child_ID>
</group>
<group>
<ID>2</ID>
<Child_ID>5</Child_ID>
</group>
</groups>
1.
1001
1150
1151
1002
2.
5.
不匹配。
<items>
<item>
<id>1</id>
<parent_id>0</parent_id>
<name>Cars</name>
</item>
<item>
<id>2</id>
<parent_id>0</parent_id>
<name>Tools</name>
</item>
<item>
<id>1001</id>
<parent_id>1</parent_id>
<name>Ford</name>
</item>
<item>
<id>1002</id>
<parent_id>1</parent_id>
<name>Toyota</name>
</item>
<item>
<id>5</id>
<parent_id>2</parent_id>
<name>Axe</name>
</item>
<item>
<id>1150</id>
<parent_id>1001</parent_id>
<name>Ka</name>
</item>
<item>
<id>1151</id>
<parent_id>1001</parent_id>
<name>Raptor</name>
</item>
</items>
<?xml version="1.0" encoding="UTF-8"?>
<groups>
<group>
<ID>1</ID>
<Child_ID>1001</Child_ID>
<Child_ID>1150</Child_ID>
<Child_ID>1151</Child_ID>
<Child_ID>1002</Child_ID>
</group>
<group>
<ID>2</ID>
<Child_ID>5</Child_ID>
</group>
</groups>