2016-11-16 13 views
0

複数のXMLファイルを検索して置換する必要があります。私は編集するための多くのファイルがあるので、私はこの仕事をするためのスクリプトを書くことを探しています。例えば、複数のファイルで条件付きでXMLタグを置換する

I need to change above code to following
<search index="1,2,4"> 
    <![CDATA[ 
     <?php -- code to be searched -- ?> 
      ]]> 
</search> 
<add position="after" offset="2"> 
    <![CDATA[ --code to add here-- ]]> 
</add> 


<search position="after" index="0,1,3" offset="2"> 
    <![CDATA[ 
     <?php -- code to be searched -- ?> 
      ]]> 
</search> 
<add> 
    <![CDATA[ --code to add here-- ]]> 
</add> 

は、私は、検索から
への移動位置を必要とし、タグを追加し、位置は '前'、 '後'、 '置き換える' ことができます。新しいインデックスは、動きは私が探して知っている限り、タグに

を追加するオフセット1ではなく

3.ゼロから始めると

2.インデックスタグは、タグを追加するために移動し、インクリメントされなければなりません特定の文字列と置換は、str_replaceを使用して簡単ですが、私は文字列を検索し、次の行を置換または追加し、.xml拡張子で終わるすべてのファイルを反復する方法を取得できません。 PHPやコマンドラインのいずれかでそれを行う最良の方法は何ですか?

答えて

1

まず、行うには、これを行うためのXSLT変換を記述します。あなたは本当にテキストレベルでこれをやりたいとは思っていません。特に、手作業でそれぞれを確認するファイルが多すぎる場合は、それを間違って取得する方法が多すぎます。 (私はXを呼び出しますsearchaddラッパー要素を仮定して)次のようにXSLT 2.0のコードは

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

<xsl:template match="X"> 
<xsl:copy> 
    <search index="{string-join(for $t in tokenize(search/@index, ',') return string(number($t)+1))}"> 
    <xsl:copy-of select="search/node()"/> 
    </search> 
    <add position="{search/@position}" offset="{search/@offset}"> 
    <xsl:copy-of select="add/node()"/> 
    </add> 
</xsl:copy> 
</xsl:template> 

</xsl:transform> 

は、その後、あなたがディレクトリ内のすべてのファイルにこれを適用する必要があることでしょう。 Saxonを使用している場合は、コマンドラインから-s:input-dir -o:output-dirと指定してください。

+0

申し訳ありませんが、私はXSLT変換に精通していないか、使用方法を知っていません。これらのxmlファイルは、core phpファイルの変更を行う修正システム用です。これを適用するのが簡単なプロセスなのか、それを始めるにあたって最善の出発点になればいいのか教えていただけますか?ありがとう –

+0

XMLを操作している場合は、木工をしているときと同じように、XSLTをマスターする必要があります。あなたは、鋸とチゼルの使い方を学ぶ必要があります。学習曲線はありますが、間違ったツールを使って仕事をしようとすると、仕事に必要なツールを学ぶよりもはるかに時間がかかります。 –

関連する問題