Java:解析XML时忽略转义

时间:2010-04-12 21:07:26

标签: java xml escaping

我正在使用DocumentBuilder来解析XML文件。但是,项目规范要求在文本节点中,字面上返回"<等字符串,解码为字符("和{ {1}})。

之前的类似问题Read escaped quote as escaped quote from xml收到了一个似乎特定于Apache的答案,而另一个似乎并没有按照它所说的那样做。无论如何,我都喜欢被证明是错的:)

供参考,以下是一些代码:

<

我希望println()产生类似

的东西
  file = new File(fileName);
  DocBderFac = DocumentBuilderFactory.newInstance();
  DocBder = DocBderFac.newDocumentBuilder();
  doc = DocBder.parse(file);

  NodeList textElmntLst = doc.getElementsByTagName(text);
  Element textElmnt = (Element) textElmntLst.item(0);

  NodeList txts = textElmnt.getChildNodes(); 
  String txt = ((Node) txts.item(0)).getNodeValue();
  System.out.println(txt);

而不是

&quot;3&gt;2&quot;

这是目前发生的事情。 谢谢!

4 个答案:

答案 0 :(得分:3)

您可以通过

将它们重新转换为xml编码形式
 StringEscapeUtils.escapeXml(str);

javadoccommons-lang

答案 1 :(得分:2)

  

我正在使用DocumentBuilder来解析XML文件。但是,项目规范要求在文本节点内,字面上返回&quot;&lt;等字符串,而不是解码为字符(“和&lt;)。

要求不好。不要那样做。

或至少仔细考虑您认为自己想要或需要它的原因。

CDATA部分和转义是一种允许您传递引号和'&lt;'等文字的策略通过XML而没有XML的字符将它们与标记混淆。它们本身没有意义,当你将它们从XML中删除时,你应该接受它们作为引号和'&lt;'他们打算代表的人物。

答案 2 :(得分:1)

一种方法可能是尝试dom4j,并使用Node.asXML()方法。它可能会返回一个深层结构,因此可能需要克隆才能获得所需的节点或文本,而不需要任何子节点。

答案 3 :(得分:-3)

这两个很好的答案,但对于这个非常小规模的应用来说,这两者都有点太重了。我最终还是完全剥离了所有&amp; s(我这样做以及以后无法逃脱的部分)。这很难看,但它正在发挥作用。

编辑:我知道这有各种各样的错误,而且要求是愚蠢的。这是一个学校项目,重要的是它在一个案例中工作,并且要求不是我的错:)