0

私はXMLを持っています。そのXMLには、それ自体がいくつかの要素を持つ要素があります。今、私が望むのは、すべてをコピーしてタグ名を変更することです。

XML 構造:

<mothertag>
     <atag>
        asdfasdfa
     </atag>

     <storybody>
        <p>sometext here<URI ref="http://google.com" /> some more text</p>
     </storybody>

</mothertag>
  1. <storybody>名前をに変更したいのですが<body>
  2. 他のすべてはそのままで、に変更する必要があり<URI>ます<a>

ドキュメントの残りの部分で私がやっていることは、テンプレートを定義して 1 つずつ適用することです。今、私はこれに遭遇しましたが、ほとんど変更がなく、名前が変更されているため、コピーする必要があります。

4

2 に答える 2

0

目的の結果の XML の例がないと、Touseef が何をしようとしているのかは不明ですが....

入力ドキュメントの大部分を破棄して 1 つのタグのみを保持する必要がある場合は、次のパターンが役立ちます。

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

   <xsl:template match="storybody">
       <xsl:copy-of select="."/>
   </xsl:template>

 </xsl:stylesheet>

入力時に XSLT エンジンを搭載したマシンの前にいないので、これをテストしていません。しかし、アイデアはすべてを最初のテンプレートと一致させ、単純に出力ドキュメントにコピーする storybody 要素を除いて無視することです。

これで問題が解決しない場合は、希望する結果の XML ドキュメントのサンプルと、適用したいルールの明確なステートメントを提供することを強くお勧めします。

于 2012-05-10T18:05:16.853 に答える
0

<storybody>XSLT でこれを行うには、要素を除いて、基本的な恒等変換だけが必要です。

このようなもの:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

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

</xsl:stylesheet>

編集

「ID 変換を使用したくありません。むしろ、ドキュメント内の 1 つの要素で ID 変換を使用する必要があります」というコメントを読みましたが、何が必要かわかりません。おそらく、ドキュメントの残りの部分の変換は問題ありませんが、この要素に問題がありますか? その場合、すでに書いたものに加えて、私の回答の 2 番目のテンプレートのみを使用する必要があります。

メッセージの 2 番目の部分は、マークアップで部分的に失われていましたが、現在は修正されており、見落としていました。<URI>要素を<a>同様に変更するには、別のテンプレートを追加する必要があります。ref元の属性をに変更すると仮定するとhref、2 つを合わせると次のようになります。

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

<xsl:template match="storybody//URI">
  <a>
    <xsl:attribute name="href">
      <xsl:value-of select="@ref" />
    </xsl:attribute>
  </a>
</xsl:template>

あなたの意図がこれとは異なるものであった場合は、明確にしてください。さらにお手伝いします.

于 2012-05-10T15:39:01.683 に答える