【问题标题】:Stop escaping special characters when saving to XML with DOM使用 DOM 保存到 XML 时停止转义特殊字符
【发布时间】: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>&lt;p&gt;schemeName&lt;/p&gt;</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 是包含&amp;lt;p&amp;gt; 的字符串吗?你想添加一个 XML 元素 p 作为 aNode 的子元素吗?
  • 如果要将HTML代码保存为XML元素的内容,那么保存为&amp;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 文件的代码。

标签: java html xml


【解决方案1】:

你可以这样做 stringString.replaceAll("&amp;lt;","&lt;").replaceAll("&amp;gt;","&gt;") 在你输出数据之前

【讨论】:

    猜你喜欢
    • 2016-11-23
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    相关资源
    最近更新 更多