1

これは私のXmlファイルです。xsltを使用してこのxmlファイルを別のカスタマイズされたxmlファイルに変換したいと思います。

XMLファイル:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:body>
    <w:p>
        <w:r>
            <w:t>Text1-</w:t>
        </w:r>
        <w:smartTag>
            <w:smartTag>
                <w:smartTag>
                    <w:smartTag>
                        <w:r>
                            <w:t>Text2-</w:t>
                        </w:r>
                    </w:smartTag>
                </w:smartTag>
                <w:r>
                    <w:t>Text3-</w:t>
                </w:r>
                <w:smartTag>
                        <w:r>
                            <w:t>Text4-</w:t>
                        </w:r>
                </w:smartTag>
                <w:r>
                    <w:t>Text5-</w:t>
                </w:r>
            </w:smartTag>
        </w:smartTag>
        <w:r>
            <w:t>Text6-</w:t>
        </w:r>
    </w:p>
    </w:body>
    </w:document>

MY XSLT Snipptは:

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                              xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">                              
  <xsl:output method="html" indent="yes"/>

  <xsl:template match="*">

    <Document>
        <xsl:choose>
            <xsl:apply-templates select="//w:p[w:r[w:t]]">
            </xsl:apply-templates>      
      </xsl:choose>
    </Document>
  </xsl:template>


  <xsl:template match="w:p">
    <Paragraph>

     <xsl:if test="(.//w:smartTag/w:r/w:t)">
            <xsl:apply-templates select="//w:smartTag//w:r//w:t"/>
     </xsl:if>
    <xsl:apply-templates select="./w:r/w:t"/>
    </Paragraph>    
  </xsl:template>


  <xsl:template match="w:t">
    <xsl:value-of select="."/>
  </xsl:template>
  </xsl:stylesheet>

私の現在の出力は:

<Document>
<Paragraph>
       Text2-Text3-Text4-Text5-Text1-Text6-
</Paragraph>
</Document>

私の必要な出力は:

<Document>
    <Paragraph>
           Text1-Text2-Text3-Text4-Text5-Text6-
    </Paragraph>
</Document>

保存されている順序を失うことなく要素を取得するようにガイドしてください...

4

2 に答える 2

3

何を処理するかについて追加のルールがない限り、これはw:t要素に一致するテンプレートを用意するだけで簡単に実行できます。

<xsl:template match="w:r/w:t">
   <xsl:value-of select="." />
</xsl:template>

また、ドキュメントと段落を処理するために一致する必要があります。次のXMLを試してください

<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"    
 xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" 
 exclude-result-prefixes="w">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="/">
      <Document>
         <xsl:apply-templates />
      </Document>
   </xsl:template>

   <xsl:template match="w:p">
      <Paragraph>
         <xsl:apply-templates />
      </Paragraph>
   </xsl:template>

   <xsl:template match="w:r/w:t">
      <xsl:value-of select="." />
   </xsl:template>

   <!-- Ignore text for all other elements -->
   <xsl:template match="text()"/>
</xsl:stylesheet>

サンプルXMLに適用すると、次のように出力されます。

<Document>
   <Paragraph>Text1-Text2-Text3-Text4-Text5-Text6-</Paragraph>
</Document>
于 2012-06-21T11:58:46.580 に答える
1

短くてシンプル:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
 exclude-result-prefixes="w">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*/*/w:p">
     <Document>
      <Paragraph>
        <xsl:value-of select="string()"/>
      </Paragraph>
     </Document>
 </xsl:template>
</xsl:stylesheet>

この変換が提供されたXMLドキュメントに適用される場合:

<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:body>
        <w:p>
            <w:r>
                <w:t>Text1-</w:t>
            </w:r>
            <w:smartTag>
                <w:smartTag>
                    <w:smartTag>
                        <w:smartTag>
                            <w:r>
                                <w:t>Text2-</w:t>
                            </w:r>
                        </w:smartTag>
                    </w:smartTag>
                    <w:r>
                        <w:t>Text3-</w:t>
                    </w:r>
                    <w:smartTag>
                        <w:r>
                            <w:t>Text4-</w:t>
                        </w:r>
                    </w:smartTag>
                    <w:r>
                        <w:t>Text5-</w:t>
                    </w:r>
                </w:smartTag>
            </w:smartTag>
            <w:r>
                <w:t>Text6-</w:t>
            </w:r>
        </w:p>
    </w:body>
</w:document>

必要な正しい結果が生成されます。

<Document>
   <Paragraph>Text1-Text2-Text3-Text4-Text5-Text6-</Paragraph>
</Document>
于 2012-06-21T12:41:52.983 に答える