2011-06-19 4 views
0

私はPHPでXMLフォーマット(SimpleXML)のメタデータを索引付けしています。プロセス(といくつかの後の時間)で私はそれらの属性/位置/名前で要素を書き換え(そして削除したい)。私はxsltがそうすることには良いと思うが、パフォーマンスのために少し怖い。だからルールとしてregexpを作成し、PHPで直接編集するほうがよいでしょうか?これらの選択肢のために、私は援助の助けを借りて操作構文を見つけることができませんでした。phpのxsltでxml要素の類義語置換?

これはどうやってやるのですか?あなたの助けのため おかげで、 ロバート

+0

正規表現ではXMLを操作できません。 XSLTを使用して、パフォーマンスが怖いのはなぜですか? –

+0

DOMオブジェクトに変換する必要がある場合は、simplexml/DOM交換でバグが頻繁に(複数回)呼び出されるためです。したがって、simpleXMLで繰り返し、ノードの一部をDOMに変換して変換するとインポート関数を使用すると、オブジェクトは何とか同じではないため、繰り返しはキャンセルされます。 – rokdd

+0

良い質問、+1。完全でシンプルで簡単で簡単な汎用XSLTソリューションについては、私の答えを見てください。 XML文書の変換が必要な場合は、この問題を解決するためにXSLTを使用しないという重大な間違いがあります。 –

答えて

2

は、私はそれが正規表現削除/ XML文書内の任意の深さでノードに対する操作を置き換え/追加を表現するために、一般的な場合に可能である疑い(ないに言及します属性、名前空間、深さ、テキストノードなどの条件を同時に満たす)。

これは、そのようなRegExが見つからなかった理由を説明しています。

反対側では、このような操作はXSLTでは簡単ではありません。実際にはもっと重要なことがあるため、この問題を忘れてしまいます。レコードの

は、以下aと命名エイミー要素が hに変更され)要素の名前変更動作である:

<a> 
    <b> 
     <c> 
      <d/> 
      <a> 
       <b> 
        <e> 
         <f> 
          <c> 
           <d> 
            <a/> 
           </d> 
          </c> 
         </f> 
        </e> 
       </b> 
      </a> 
     </c> 
    </b> 
</a> 
:このXMLドキュメントに例えば適用

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

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

<xsl:template match="a"> 
    <h> 
    <xsl:apply-templates/> 
    </h> 
</xsl:template> 
</xsl:stylesheet> 

正しい結果が得られる

<h> 
    <b> 
     <c> 
     <d/> 
     <h> 
      <b> 
       <e> 
        <f> 
        <c> 
         <d> 
          <h/> 
         </d> 
        </c> 
        </f> 
       </e> 
      </b> 
     </h> 
     </c> 
    </b> 
</h> 
+0

あなたの例をよくありがとう。私はすでにsimpleXMLでxsltを使っていました。上記のコメントで述べたように、DOMのノードをxsltと交換すると、より高い階層で反復すると安定しません。xsltはかなり働いているかもしれません。 – rokdd

+1

@rokdd:XSLTはXML変換の言語として設計されています。それは容易さと優雅さを提供し、同時に非常に強力です。間違いなく、自分のツールセットにその場所を持つツールです。 –

関連する問題