1

前の投稿で。

ここにリンクがあります

前の質問

ここでも、入力xmlの小さな更新は、他の検証はすべて同じです。ここでは、チャプターiではなくチャプター(要素)のみが変更されています。

<tutorial>
<lessons>
    <lesson>
     12000 Bat 20 
    </lesson>
    <lesson>
        15000 Pen Ball 10~ 
    </lesson>
    <lesson>
        14000 Book 
    </lesson>
    <lesson>
        note lesson
    </lesson>
</lessons>
<lessons1>
    <lesson>
        24000 Pencil 10
    </lesson>
    <lesson>
        description page
    </lesson>
    <lesson>
        8000 Car Tank 25
    </lesson>
</lessons1>

前の質問では、チャプターが最初のノード(チャプターバット20)でしたが、ここでは12000バット20があります

上記の入力に対する希望の出力は

<Geography>
<historical>
  <social>
     <toc1>
        <toc>
           <chapter>12000</chapter>
           <unit>Bat</unit>
           <pages>20</pages>
        </toc>
        <toc>
           <chapter>15000</chapter>
           <unit>Pen Ball</unit>
           <pages>10</pages>
        </toc>
        <toc>
           <chapter>14000</chapter>
           <unit>Book</unit>
           <pages>10</pages>
        </toc>
        <toc>
           <sample>
              <original>note lesson</original>
           </sample>
        </toc>
     </toc1>
     <toc2>
        <toc>
           <chapter>24000</chapter>
           <unit>Pencil</unit>
           <pages>10</pages>
        </toc>
        <toc>
           <sample>
              <original>description page</original>
           </sample>
        </toc>
        <toc>
           <chapter>8000</chapter>
           <unit>Car Tank</unit>
           <pages>25</pages>
        </toc>
     </toc2>
  </social>

@ Dimitre&@ Tomalak次回から、完全に準備された質問を書き、間違いなく私が持っている解決策を投稿します。今、私はこの以下の出力と前の出力で少し速く(XSLT)学習し始めています。

ここで案内してください

よろしくお願いしますKarthic

4

1 に答える 1

1

この変換

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
              xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
                <xsl:output omit-xml-declaration="yes" indent="yes"/>
                <xsl:strip-space elements="*"/>

             <xsl:template match="tutorial">
                <Geography>
                  <historical>
                    <social>
                         <xsl:apply-templates select=
                         "*[starts-with(name(),'lessons')]"/>
                    </social>
                  </historical>
                </Geography>
             </xsl:template>

             <xsl:template match="*[starts-with(name(), 'lessons')]">
              <xsl:variable name="vPos" select="position()"/>

              <xsl:element name="toc{$vPos}">
               <xsl:apply-templates/>
              </xsl:element>

             </xsl:template>

             <xsl:template match=
             "lesson[substring-before(normalize-space(), ' ')
                    castable as xs:integer
                    ]">
              <xsl:variable name="vNorm" select=
                             "translate(normalize-space(), '~', '')"/>
              <xsl:variable name="vAtUnit" select=
                             "substring-after($vNorm, ' ')"/>

              <xsl:variable name="vUnit" select=
              "replace($vAtUnit, '([^0123456789]+)(\d*)', '$1')"/>

              <xsl:variable name="vLastPart" as="xs:string" select=
               "substring-after($vAtUnit, $vUnit)"/>

              <xsl:variable name="vNum"
                select="concat($vLastPart, '10'[not($vLastPart)])"/>

              <toc>
                <chapter>
                 <xsl:value-of select="substring-before($vNorm, ' ')"/>
                </chapter>
                <unit><xsl:value-of select="normalize-space($vUnit)"/></unit>
                <pages><xsl:value-of select="$vNum"/></pages>
              </toc>
             </xsl:template>

             <xsl:template match="lesson">
               <toc>
                   <sample>
                     <original><xsl:value-of select="normalize-space()"/></original>
                   </sample>
               </toc>
             </xsl:template>
</xsl:stylesheet>

提供されたXMLドキュメントに適用した場合

    <tutorial>
    <lessons>
        <lesson>
         12000 Bat 20
        </lesson>
        <lesson>
            15000 Pen Ball 10~
        </lesson>
        <lesson>
            14000 Book
        </lesson>
        <lesson>
            note lesson
        </lesson>
    </lessons>
    <lessons1>
        <lesson>
            24000 Pencil 10
        </lesson>
        <lesson>
            description page
        </lesson>
        <lesson>
            8000 Car Tank 25
        </lesson>
    </lessons1>
</tutorial>

必要な正しい結果を生成します

<Geography>
   <historical>
      <social>
         <toc1>
            <toc>
               <chapter>12000</chapter>
               <unit>Bat</unit>
               <pages>20</pages>
            </toc>
            <toc>
               <chapter>15000</chapter>
               <unit>Pen Ball</unit>
               <pages>10</pages>
            </toc>
            <toc>
               <chapter>14000</chapter>
               <unit>Book</unit>
               <pages>10</pages>
            </toc>
            <toc>
               <sample>
                  <original>note lesson</original>
               </sample>
            </toc>
         </toc1>
         <toc2>
            <toc>
               <chapter>24000</chapter>
               <unit>Pencil</unit>
               <pages>10</pages>
            </toc>
            <toc>
               <sample>
                  <original>description page</original>
               </sample>
            </toc>
            <toc>
               <chapter>8000</chapter>
               <unit>Car Tank</unit>
               <pages>25</pages>
            </toc>
         </toc2>
      </social>
   </historical>
</Geography>
于 2012-07-19T03:38:39.293 に答える