Как сообщить данные из родительского и дочернего уровней в одной строке? а со случайного подуровня? - PullRequest
1 голос
/ 29 ноября 2010

Мне нужно сообщить имя и идентификатор для уровня 1 и уровня 2 reporting:folder в файле. и для каждой строки reporting:line необходимо указать правильную папку верхнего уровня 2. В идеале он должен сначала сообщать обо всех деталях папки верхнего уровня, затем о деталях папки второго уровня и, наконец, все reporting:line на любом подуровне. Таким образом, вывод будет примерно таким:

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

не уверен, как заставить код возвращаться из отчетов: перейдите в папку уровня 1 и уровня 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> 

1 Ответ

1 голос
/ 29 ноября 2010

Эта таблица стилей:

<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,
                                     '&#xA;')"/>
        <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

Вывод:

test00,test00,test00,test00,2
test00,test0,test0,test0,31
test00,test0,test1,test2,-32
test00,test0,test1,test3,1
test10,test10,test10,test10,10
test10,test11,test11,test11,11
test10,test11,test13,test14,56

EDIT : лучшее выражение для предпоследнего предка (исключение проблем с возможным line потомком первогопапка уровня)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...