【发布时间】:2019-04-29 09:44:51
【问题描述】:
在使用 DOM 写入 XML 时,有什么方法可以防止 Java 转义特殊字符?我无法更改 XML 的格式,因此无法将它们保存在 CDATA 标记中。
我正在尝试使用 DOM 将 HTML 保存在 XML 文件中。目前它正在转义特殊字符,因此<p> 被保存为<p>。
public void updateXML(Document doc) throws XPathExpressionException{
Node aNode = getXMLNode("//PRECISSCHE.HTM/html/body", doc);
removeChilds(aNode);
aNode.setTextContent(saved_precis_Scheme);
}
输出为:
<PRECISSCHE.HTM>
<html>
<body><p>schemeName</p></body>
</html>
</PRECISSCHE>
但我需要:
<PRECISSCHE.HTM>
<html>
<body><p>schemeName</p></body>
</html>
</PRECISSCHE>
这是我创建 doc 对象的代码:
//pull data and write to XML
public void updateXML(String path) throws XPathExpressionException{
try {
String filepath = path;
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
docFactory.setIgnoringElementContentWhitespace(true);
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(filepath);
Tab_Client.updateClientXML(doc);
if(!polType.equals("Household")){
Tab_Vehicle.updateVehicleXML(doc);
Tab_PCClaimsConv.updateXML(doc);
Tab_precis.updateXML(doc);
}
if(polType.equals("Household")){
Tab_PropertyDetails.updatePropertyDetailsXML(doc);
Tab_HCsumInsured.updateXML(doc);
Tab_Contents.updateXML(doc);
Tab_HCClaims.updateXML(doc);
}
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(filepath));
transformer.transform(source, result);
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (TransformerException tfe) {
tfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (SAXException sae) {
sae.printStackTrace();
}
}
【问题讨论】:
-
saved_precis_Scheme是包含&lt;p&gt;的字符串吗?你想添加一个 XML 元素p作为aNode的子元素吗? -
如果要将HTML代码保存为XML元素的内容,那么保存为
&lt;之类的就对了。如果您想将其他 XML 元素添加到您的 XML 元素中,您可以使用不同的方法,例如createElement()和insertAfter(或任何您想做的事情)。请edit您的问题包括您拥有的 XML 内容以及您希望如何更改它。还包括您拥有的完整源代码作为minimal reproducible example。 -
saved_precis_scheme 将保存一些 HTML。例如
一个词
。有时它会是更复杂的 HTML。我知道转义特殊字符是正确的,但我需要禁用它。我没有设计 XML,它必须在没有 CDATA 的情况下将 HTML 存储在 XML 中。 -
这是您的 DOM 到 XML 序列化代码的属性,默认情况下将生成 XML,当解析回来时将生成与您开始时相同的 DOM。因为那不是你想要的。您将需要覆盖或编写自己的序列化程序。就目前而言,您根本没有发布您的序列化代码。请注意,如果您嵌入的 html 不是 XML 格式正确的,那么您最终会得到一个不是 XML 的文件。
-
@Alohci 谢谢Alohci。我已经更新了我用来读取 XML 文件的代码。