0

次のような文字列があります。

<tag1><tag2>Text</tag2> > AnotherText</tag1>

XMLOutputFactoryImpl を使用してその XML を解析して文字列に変換していますが、単一の「より大きい」(AnotherText の直前) もエスケープする必要があります。

これを機能させるために OutputFactory をどのように構成する必要があるか考えていますか?

4

3 に答える 3

1

問題を再現できません。これが私のコードです(私はrt.jarのデフォルトのStAXを使用しています):

    XMLOutputFactory of = XMLOutputFactory.newInstance();
    System.out.println(of.getClass());
    XMLStreamWriter ow = of.createXMLStreamWriter(System.out);
    ow.writeStartElement("tag1");
    ow.writeStartElement("tag2");
    ow.writeCharacters("Text");
    ow.writeEndElement();
    ow.writeCharacters("> AnotherText");
    ow.writeEndElement();
    ow.close();

出力

<tag1><tag2>Text</tag2>&gt; AnotherText</tag1>
于 2012-12-04T15:49:20.837 に答える
1

XML API (DOM、StAX、または JAXB) を使用している場合、コンテンツは自動的にエスケープされます。これには CDATA セクションを使用することもできます。

于 2012-12-04T13:48:52.423 に答える
0

Apache Common lang ライブラリを使用して、文字列をエスケープできます。

org.apache.commons.lang.StringEscapeUtils

String escapedXml = StringEscapeUtils.escapeXml("the data might contain & or ! or % or ' or # etc");

更新された回答:

最善の解決策は、テキスト入力を生成するプログラムを修正することです。そのような最も簡単な修正には、他の回答が示唆するようなエスケープユーティリティが含まれます。それができない場合は、次のような正規表現を使用します

</?[a-zA-Z]+ */?>

予想されるタグに一致させ、文字列をタグ (変更せずに渡したい) とタグ間のテキスト (エスケープ メソッドを適用したい) に分割します。

あなたが扱っているのは有効な XML ではないので、XML パーサーがそれを実行できるとは期待していません。既存のエスケープの欠如が曖昧さを生み出す可能性があるため、完璧な仕事をすることもできないかもしれません.

于 2012-12-04T13:45:04.583 に答える