为什么&符号在文本节点上被解释为子节点

时间:2010-01-25 03:40:14

标签: java xml dom blackberry

我有一个我正在解析的xml文件,我有以下标记......

<desc>
/wap/news/text.jsp?sid=242&nid=5662369&cid=5038&scid=-1
</desc>

我无法控制此xml文件的格式,但我需要将desc内容解释为部分网址,稍后我会将其附加到基本网址并检索新文件。

当我解析这个时,desc标签有一个子节点,一个值为...的文本节点

/wap/news/text.jsp?sid=242

但该行的其余部分在上述文本节点上被解析为6个子节点,其值为...

&
nid=5662369
&
cid=5038
&
scid=-1

如何让解析器将其视为单个文本节点而不是解释'&amp;'符号作为子节点。

相关的解析代码如下。

HttpConnection c = (HttpConnection) Connector.open(inURL.toString(), Connector.READ);
is = c.openInputStream();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);
factory.setAllowUndefinedNamespaces(true);
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(is);

这是黑莓上的J2ME代码,所以我对可用的API非常有限。

2 个答案:

答案 0 :(得分:3)

&是XML中的特殊字符。它需要以&amp;转义。

如果有什么东西产生了上面的文本文件,那么它就不会产生有效的XML。

答案 1 :(得分:0)

首先,您的原始XML代码不是有效的XML,这是导致您失败的一个原因。其次,Java默认不会合并碎片文本内容。我写了一篇关于此细节的博客文章,以及如何通过在解析工厂上设置属性来合并不同的文本节点:

http://www.drillio.com/en/software-development/java/fragmented-xml-text-nodes/