は、私はそれが正規表現削除/ 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>
正規表現ではXMLを操作できません。 XSLTを使用して、パフォーマンスが怖いのはなぜですか? –
DOMオブジェクトに変換する必要がある場合は、simplexml/DOM交換でバグが頻繁に(複数回)呼び出されるためです。したがって、simpleXMLで繰り返し、ノードの一部をDOMに変換して変換するとインポート関数を使用すると、オブジェクトは何とか同じではないため、繰り返しはキャンセルされます。 – rokdd
良い質問、+1。完全でシンプルで簡単で簡単な汎用XSLTソリューションについては、私の答えを見てください。 XML文書の変換が必要な場合は、この問題を解決するためにXSLTを使用しないという重大な間違いがあります。 –