Xslt 如何在同一行中报告来自父级和子级的数据?从随机子级开始?
我需要在文件中报告Xslt 如何在同一行中报告来自父级和子级的数据?从随机子级开始?,xslt,Xslt,我需要在文件中报告reporting:folder的级别1和级别2的名称和标识。对于报告:行的每一行,它需要报告正确的前2级文件夹。理想情况下,它应该首先报告所有顶级文件夹详细信息,然后报告第二级文件夹详细信息,最后报告所有子级中的所有报告:行。因此,输出将类似于: top level folder,2nd level folder,current level folder,name,ident test00,test00,test00,test00,2 test10,test10,test
reporting:folder
的级别1和级别2的名称和标识。对于报告:行的每一行,它需要报告正确的前2级文件夹。理想情况下,它应该首先报告所有顶级文件夹详细信息,然后报告第二级文件夹详细信息,最后报告所有子级中的所有报告:行。因此,输出将类似于:
top level folder,2nd level folder,current level folder,name,ident
test00,test00,test00,test00,2
test10,test10,test10,test10,10
test00,test00,test0,test0,31
test10,test10,test11,test11,11
test00,test0,test1,test2,-32
test00,test0,test1,test3,1
test10,test11,test13,test14,56
不确定如何告诉代码从reporting:行返回到level 1和level 2文件夹以在文件中报告它们。非常感谢
xml文件如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<reporting:root xmlns:reporting="TEST">
<reporting:default0 reporting:type="TEST">
<reporting:header>
<reporting:property>TEST</reporting:property>
</reporting:header>
<reporting:window reporting:Id="1" reporting:level="0" reporting:name="TEST" reporting:parentId="-1">
<reporting:folder reporting:Id="2" reporting:level="1" reporting:name="name1" reporting:parentId="1">
<reporting:name>test00</reporting:name>
<reporting:ident>2</reporting:ident>
<reporting:folder reporting:Id="3" reporting:level="2" reporting:name="name2" reporting:parentId="2">
<reporting:name>test0</reporting:name>
<reporting:ident>31</reporting:ident>
<reporting:folder reporting:Id="4" reporting:level="3" reporting:name="name3" reporting:parentId="3">
<reporting:name>test1</reporting:name>
<reporting:ident>4</reporting:ident>
<reporting:line reporting:Id="676" reporting:level="4" reporting:name="name4" reporting:parentId="4">
<reporting:name>test2</reporting:name>
<reporting:ident>-32</reporting:ident>
</reporting:line>
<reporting:line reporting:Id="661" reporting:level="4" reporting:name="name5" reporting:parentId="4">
<reporting:name>test3</reporting:name>
<reporting:ident>1</reporting:ident>
</reporting:line>
</reporting:folder>
<reporting:folder reporting:Id="5" reporting:level="3" reporting:name="name6" reporting:parentId="3">
<reporting:name>test4</reporting:name>
<reporting:ident>5</reporting:ident>
<reporting:folder reporting:Id="6" reporting:level="4" reporting:name="name7" reporting:parentId="5">
<reporting:name>test5</reporting:name>
<reporting:ident>6</reporting:ident>
<reporting:folder reporting:Id="7" reporting:level="5" reporting:name="name8" reporting:parentId="6">
<reporting:name>test6</reporting:name>
<reporting:ident>7</reporting:ident>
<reporting:folder reporting:Id="8" reporting:level="6" reporting:name="name9" reporting:parentId="7">
<reporting:name>test7</reporting:name>
<reporting:ident>8</reporting:ident>
<reporting:folder reporting:Id="9" reporting:level="7" reporting:name="name10" reporting:parentId="8">
<reporting:name>test8</reporting:name>
<reporting:ident>9</reporting:ident>
</reporting:folder>
</reporting:folder>
</reporting:folder>
</reporting:folder>
</reporting:folder>
</reporting:folder>
</reporting:folder>
<reporting:folder reporting:Id="10" reporting:level="1" reporting:name="name11" reporting:parentId="1">
<reporting:name>test10</reporting:name>
<reporting:ident>10</reporting:ident>
<reporting:folder reporting:Id="11" reporting:level="2" reporting:name="name12" reporting:parentId="10">
<reporting:name>test11</reporting:name>
<reporting:ident>11</reporting:ident>
<reporting:folder reporting:Id="12" reporting:level="3" reporting:name="name13" reporting:parentId="11">
<reporting:name>test12</reporting:name>
<reporting:ident>12</reporting:ident>
<reporting:folder reporting:Id="13" reporting:level="4" reporting:name="name14" reporting:parentId="12">
<reporting:name>test13</reporting:name>
<reporting:ident>13</reporting:ident>
<reporting:line reporting:Id="160" reporting:level="5" reporting:name="name15" reporting:parentId="13">
<reporting:name>test14</reporting:name>
<reporting:ident>56</reporting:ident>
</reporting:line>
</reporting:folder>
</reporting:folder>
</reporting:folder>
</reporting:folder>
</reporting:window>
</reporting:default0>
</reporting:root>
试验
测试00
2.
测试0
31
测试1
4.
测试2
-32
测试3
1.
测试4
5.
测试5
6.
测试6
7.
测试7
8.
测试8
9
测试10
10
测试11
11
测试12
12
测试13
13
测试14
56
此样式表:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:r="TEST">
<xsl:output method="text"/>
<xsl:template match="text()"/>
<xsl:template match="r:line|r:folder[@r:level=1 or @r:level=2]">
<xsl:value-of select="concat(ancestor-or-self::r:folder
[last()]/r:name,
',',
(ancestor-or-self::r:folder
[position() >= last()-1])
[last()]/r:name,
',',
ancestor-or-self::r:folder[1]/r:name,
',',
r:name,
',',
r:ident,
'
')"/>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
编辑:倒数第二个祖先的更好表达方式(避免一级文件夹的子文件夹出现问题)此样式表:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:r="TEST">
<xsl:output method="text"/>
<xsl:template match="text()"/>
<xsl:template match="r:line|r:folder[@r:level=1 or @r:level=2]">
<xsl:value-of select="concat(ancestor-or-self::r:folder
[last()]/r:name,
',',
(ancestor-or-self::r:folder
[position() >= last()-1])
[last()]/r:name,
',',
ancestor-or-self::r:folder[1]/r:name,
',',
r:name,
',',
r:ident,
'
')"/>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
编辑:倒数第二个祖先的更好表达(避免一级文件夹的posible行
子级出现问题)请使用101010
按钮正确格式化代码块和`用于内联代码段。请使用101010
按钮正确格式化代码块和`用于内联代码段。Alejandro,我能说什么?你太棒了!!这正是我需要的!。一百万泰铢。@肯:你真是太棒了!随便问,亚历杭德罗,我能说什么?你太棒了!!这正是我需要的!。一百万泰铢。@肯:你真是太棒了!随时问。