Java: XML generation with DOM and unescapeHtml4()



我有一个源文本文件,其中包含一堆正则表达式。我正在阅读文本文件,将正则匹配分配给数组索引,并使用DOM创建XML。

但是,我需要将一些样板信息添加到生成的XML文档中。我只想使用element.setTextContent(someboilerplatexml)将XML样板信息删除到其中一个。

,而不是创建数百个新的,复杂的嵌套DOM元素。

我正在尝试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

为什么要这样做,我该怎么做?我需要使用另一个免费的软件包吗?

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);

这是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">

最新更新