0

正規表現の束を含むソーステキストファイルがあります。テキストファイルを読み、正規表現の一致を配列インデックスに割り当て、DOMを使用してXMLを作成しています。

ただし、結果のXMLドキュメントに追加する必要のある定型的な情報がいくつかあります。何百もの新しい複雑なネストされたDOM要素を作成する代わりに、element.setTextContent(someBoilerPlateXML)を使用してXMLボイラープレート情報をXMLDOM要素の1つにドロップしたいと思います。

これを行うためにorg.apache.commons.lang3.StringEscapeUtils.unescapeHtml4を試しています。System.out.println(someBoilerPlateXML)テストでは機能するようですが、element.setTextContent(someBoilerPlateXML)実装では機能しません。

例えば:

入力: String test = org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4("<Hello id=\"id\"/>"); System.out.println(test);

出力: <Hello id="id"/>

入力: Element element= doc.createElement("element");
element.setTextContent(org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4("<Hello id=\"id\">"));

結果のXMLファイルに出力します。 &lt;Hello id="id"/&gt

なぜそれがこれを行うのですか、そしてどうすればそれを正しくすることができますか?代わりに使用する必要がある別の無料パッケージはありますか?

4

2 に答える 2

1

element.setTextContentあなたが発見したように、それをxmlとして認識して処理するのではなく、フィードしたテキストをエスケープします。

xmlとして追加するxmlのテキスト表現がある場合は、それをxmlとして処理する必要があります。つまり、それをDOMに解析してNodeから、その形式で追加します。

テキストが完全なxmlでない場合、これは機能しません。あなたの例では、開始タグしかなく、これを解析して。を作成することはできませんNode

しかし、それが完了していて、テキストとして作成する方が簡単であることがわかった場合は、次のようにすることができます。

    DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

    Document doc = documentBuilder.newDocument();
    Element element= doc.createElement("element");
    doc.appendChild(element);

    Document newDoc = documentBuilder.parse(new InputSource(new StringReader("<Hello id=\"id\"/>")));

    Element newElement = newDoc.getDocumentElement();
    Node node = doc.importNode(newElement, true);

    element.appendChild(node);
于 2012-10-21T03:08:12.157 に答える
0

これが、xmlテキストコンテンツがエスケープされる方法です。読み戻すと、元のテキストが返されます。

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element element= doc.createElement("element");
element.setTextContent("<Hello id=\"id\">");
doc.appendChild(element);

Transformer trf = TransformerFactory.newInstance().newTransformer();
trf.transform(new DOMSource(doc), new StreamResult(System.out));
System.out.println();
System.out.println(element.getTextContent());

プリントアウト

<?xml version="1.0" encoding="UTF-8"?><element>&lt;Hello id="id"&gt;</element>
<Hello id="id">
于 2012-10-20T19:42:39.023 に答える