3

XML 文字列で実行すると、その XML 文字列が適切にインデントされて出力される REGEX (検索置換) を作成することは可能ですか?

もしそうなら、正規表現は何ですか:)

4

7 に答える 7

5

XML文字列で実行したときにREGEX(検索置換)を書くことは可能ですか[...何でも]

いいえ。

XML パーサーを使用して文字列を読み取り、次に XML シリアライザーを使用して「pretty」モードで書き戻します。

各 XML プロセッサには独自のオプションがあるため、プラットフォームによって異なりますが、DOM レベル 3 LS 準拠の実装で動作するやや長ったらしい方法を次に示します。

input= implementation.createLSInput();
input.stringData= unprettyxml;
parser= implementation.createLSParser(implementation.MODE_SYNCHRONOUS, null);
document= parser.parse(input);
serializer= implementation.createLSSerializer();
serializer.domConfig.setParameter("format-pretty-print", true);
prettyxml= serializer.writeToString(document);
于 2009-02-12T18:42:15.053 に答える
5

正規表現を使用しない場合、これを行うのははるかに簡単です。実際、正規表現でそれが可能かどうかさえわかりません。

ほとんどの言語には、このタスクを非常に簡単にする XML ライブラリがあります。どの言語を使用していますか?

于 2009-02-12T17:36:21.450 に答える
3

正規表現が単独で、任意の XML 入力のきれいな印刷形式を実行できるかどうかはわかりません。タグを検索したり、一致する終了タグを見つけたり (タグが自己終了タグでない場合) したりするには、プログラムによって正規表現が適用される必要があります。この問題を解決するために正規表現を使用することは、実際には仕事に間違ったツールを使用することです。XML をきれいに印刷する最も簡単な方法は、XML パーサーを使用して読み取り、適切なシリアル化オプションを設定してから、XML をシリアル化して戻すことです。

この問題を解決するために正規表現を使用したいのはなぜですか?

于 2009-02-12T17:41:16.230 に答える
3

これに正規表現を使用するのは悪夢です。ノードの階層に基づいてインデント レベルを追跡することはほとんど不可能です。おそらく、perl の 5.10 正規表現エンジンは再入可能になったので役立つかもしれません。しかし、その道に入らないでください...さらに、インデントによって無視され、そのまま保持される必要がある XML 宣言を埋め込むことができる CDATA セクションを考慮する必要があります。

DOM に固執します。他の回答で示唆されたように、一部のライブラリは、DOM ツリーをインデントする関数を既に提供しています。作成しない場合は、同じタスクを実行する正規表現を作成して維持するよりもはるかに簡単になります。

于 2009-02-12T17:49:49.703 に答える
2

here で説明されているダークブードゥー正規表現はうまく機能します。
http://www.perlmonks.org/?node_id=261292
XML::LibXMl などを使用することに対する主な利点は、桁違いに高速であることです。

于 2010-07-30T09:12:34.327 に答える
1

これは、ステート マシンのように機能する複数の正規表現でのみ実現できます。

あなたが探しているものは、すぐに使えるパーサーにはるかに適しています。

于 2009-02-12T17:37:47.203 に答える