2010-11-29 1 views
1

ファイル内のレベル1とレベル2の名前とIDをreporting:folderと報告する必要があります。 reporting:lineの行ごとに正しい上位2レベルのフォルダを報告する必要があります。理想的には、すべてのトップレベルのフォルダの詳細を最初に報告し、次に第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> 
+0

コードブロックを適切にフォーマットするには '101010'ボタンを、インラインコードの場合は'を使用してください。 – khachik

答えて

1

このスタイルシート:

<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の問題を回避最初のレベルの子elフォルダ)

+0

アレハンドロ、どうしたらいいですか?あなたは揺れる!それはまさに私が必要なものです! 100万。 – ken

+0

@ken:あなたは幸せです!いつでも尋ねてください。 –

関連する問題