3

私はこのXML文書を持っています:

<Document>
    <a>
        <b>
            <c1>CCC111</c1>
            <c2>CCCC222</c2>
        </b>
        <d>
            <d1>DDD111</d1>
            <d2>DDD222</d2>
            <d3>DDD333</d3>
        </d>
</a>
</Document>

Document/a/d/d1 の値を XXXXXX に置き換えたい:

<Document>
    <a>
        <b>
            <c1>CCC111</c1>
            <c2>CCCC222</c2>
        </b>
        <d>
            <d1>XXXXXX</d1>
            <d2>DDD222</d2>
            <d3>DDD333</d3>
        </d>
</a>
</Document>

私はこの XSLT を持っています:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="Document/a/d/d1/text()">
       XXXXXX
 </xsl:template>

</xsl:stylesheet>

しかし、私は同じ入力と出力を取得します:/

ありがとうございました。

4

3 に答える 3

1

どこかに単純な転記ミスがあると思います。XXXXXXオーバーライド テンプレートを少し単純化することもできますが、次のようにします。

<xsl:template match="d1/text()">XXXXXX</xsl:template>

あなたが投稿したものはそのまま機能し、コンセプトを正しく理解していることを示しています。あなたが投稿したものが XSLT 2.0 (Saxon HE) および XSLT 1.0 (Saxon 6.5.5) プロセッサで動作することを確認できます。

名前空間定義の検出後の更新:

わかりました。入力 XML ドキュメントの要素は名前空間にあります。問題ありません。名前空間の名前空間プレフィックスを宣言し、次のように名前空間を考慮してtatatta調整する だけです。template/@match

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:t="tatatta">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="t:d1/text()">XXXXXX</xsl:template>

</xsl:stylesheet>
于 2013-10-30T16:20:04.757 に答える
0
     <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output indent="yes"/>

     <xsl:template match="node()|@*">
         <xsl:copy>
           <xsl:apply-templates select="node()|@*"/>
         </xsl:copy>
     </xsl:template>

   <xsl:template match="Document/a/d/d1/text()[.='DDD111']">XXXXXX </xsl:template>

    </xsl:stylesheet>
于 2015-05-07T11:06:58.973 に答える