【问题标题】:Java: Ignoring escapes when parsing XMLJava:解析 XML 时忽略转义
【发布时间】:2010-04-12 21:07:26
【问题描述】:

我正在使用 DocumentBuilder 来解析 XML 文件。但是,该项目的规范要求在文本节点中,像 "< 这样的字符串按字面意思返回,并且解码为字符("<)。 p>

之前的一个类似问题Read escaped quote as escaped quote from xml 收到了一个似乎特定于 Apache 的答案,而另一个似乎根本没有按照它所说的那样做。但是,我很想在这两个方面都被证明是错误的:)

供参考,这里有一些代码:

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

我希望 println() 产生类似

的东西
"3>2"

而不是

"3>2"

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

【问题讨论】:

  • 你能在这里澄清你想要什么,你想打印转义版本,还是你希望它取决于它在 XML 中的呈现方式?
  • Yishai:任何一个都会有帮助,因为我认为文件中可能永远不会有文字引号、>s 等。但是,我不能确定,如果有的话,我想保留它们。
  • 在 XML 中像 > 这样的不带引号的字符不是非法的吗?永远不会有文字 >.
  • @DJClayworth:不带引号的字符(如 >)在 CDATA 部分中是合法的。

标签: java xml escaping


【解决方案1】:

您可以通过

将它们转回xml编码的形式
 StringEscapeUtils.escapeXml(str);

(javadoc, commons-lang)

【讨论】:

    【解决方案2】:

    我正在使用 DocumentBuilder 来解析 XML 文件。但是,该项目的规范要求在文本节点内,像 "< 这样的字符串按字面意思返回,而不是解码为字符(" 和

    错误的要求。不要那样做。

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

    CDATA 部分和转义是一种策略,允许您通过 XML 传递引号和 '

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        这两个答案都很好,但对于这个非常小规模的应用程序来说,两者都太重了。我最终完全摆脱了所有 &s (我这样做是为了 &s 不是后来逃逸的一部分)。这很丑陋,但它正在工作。

        编辑:我知道这有各种各样的问题,而且要求很愚蠢。这是一个学校项目,重要的是它在一种情况下有效,要求不是我的错:)

        【讨论】:

        • 它会在某一时刻停止工作,你会想知道它是从哪里来的;)
        猜你喜欢
        • 2011-01-09
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 2019-06-09
        • 1970-01-01
        • 1970-01-01
        • 2014-07-13
        • 1970-01-01
        相关资源
        最近更新 更多