如何使用XSLT查找子文件夹级别的随机数并重新接收数据

如何使用XSLT查找子文件夹级别的随机数并重新接收数据,xslt,Xslt,我被困在这里了。想不出一个聪明的方法来实现这一点。需要在“reporting:line”下检索数据。2需要检索数据“报告:名称”和“报告:标识”“报告:行”位于“报告:福特”子级别的随机数下。因此,它们可以位于第100个子文件夹中。所以我需要一种聪明的代码来自动找到正确的级别来检索数据 基本上需要看到以下结果: test2,-32 test3,1 test14,56 以下是xml源文件: <?xml version="1.0" encoding="UTF-8" standalone="n

我被困在这里了。想不出一个聪明的方法来实现这一点。需要在“reporting:line”下检索数据。2需要检索数据“报告:名称”和“报告:标识”“报告:行”位于“报告:福特”子级别的随机数下。因此,它们可以位于第100个子文件夹中。所以我需要一种聪明的代码来自动找到正确的级别来检索数据

基本上需要看到以下结果:

test2,-32
test3,1
test14,56
以下是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:reporting="TEST">
 <xsl:output method="text"/>

 <xsl:template match="reporting:line">
  <xsl:value-of select="concat(reporting:name, ' ', reporting:ident, '&#xA;')"/>
 </xsl:template>

 <xsl:template match="text()"/>
</xsl:stylesheet>
注意事项

  • 在XSLT中,不必关心元素的实际深度。XSLT模式匹配的强大功能与XSLT默认处理相结合,使我们能够方便地为

  • 默认XSLT处理为,每个元素将模板应用于其子元素,每个文本节点输出其内容

  • 我们只需通过指定与每个
    reporting:line
    元素匹配的模板来覆盖默认的XSLT处理,在该元素中,我们精确地输出所需两个子元素的字符串值我们还使用一个不执行任何操作的模板覆盖每个文本节点的默认XSLT处理,这样就不会输出任何文本节点


  • 嗯,我如何上传我的xml源文件(嗨,Dimitre,谢谢你的回答。我试过了,效果很好。现在我还有更多的问题。我还需要在文件中报告级别1和级别2的reporting:folder的名称和标识。对于每行reporting:line,它需要报告正确的前2级文件夹,以便输出类似于:testtop level folder,第2级文件夹,当前级别文件夹,名称,ident test00,test00,test00,test00,test00,test0,test00,test0,31 test00,test0,test1,test2,-32 test00,test0,test1,test3,1 test10,test10,test10,test10,test11,test11,test10,test11,test13,test14,56尝试添加以下内容,但报告:行被忽略:不确定如何告诉代码返回到最上面的1和2文件夹,在文件中报告它们。非常感谢。@ken:如果您在新要求中再问一个问题就好了。
    test2 -32
    test3 1
    test14 56