首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >元素文本中“&”的XML解析问题

元素文本中“&”的XML解析问题
EN

Stack Overflow用户
提问于 2010-10-01 18:22:33
回答 4查看 47.8K关注 0票数 12

我有以下代码:

代码语言:javascript
运行
复制
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(inputXml)));

解析步骤是抛出:

代码语言:javascript
运行
复制
SAXParseException: The entity name must immediately follow 
                   the '&' in the entity reference

由于我的inputXml中有以下'&‘

代码语言:javascript
运行
复制
<Line1>Day & Night</Line1>

我不能控制入站XML。我如何才能安全/正确地解析它?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-01 18:24:34

很简单,输入" XML“不是有效的XML。应对实体进行编码,即:

代码语言:javascript
运行
复制
<Line1>Day &amp; Night</Line1>

基本上,除了告诉XML供应商他们正在给您提供垃圾并让他们修复它之外,没有其他“适当”的方法来解决这个问题。如果你处在一些可怕的情况下,你必须处理它,那么你采取的方法很可能取决于你期望收到的值的范围。

如果文档中根本没有实体,那么在处理之前用&amp;替换&的正则表达式就可以解决这个问题。但是,如果它们正确发送了一些实体,则需要从匹配中排除这些实体。如果他们真的想发送实体代码(即发送的是&amp;,但意思是&amp;amp;),那么你就完全不走运了。

但是,嘿--无论如何这都是供应商的错,如果你试图修复无效输入并不是他们想要的,他们可以做一件简单的事情来解决这个问题。:-)

票数 36
EN

Stack Overflow用户

发布于 2010-10-01 18:26:23

您的输入XML不是有效的XML;不幸的是,您不能实际使用XML解析器来解析它。

在将文本传递给XML解析器之前,需要对文本进行预处理。虽然您可以进行字符串替换,将'& '替换为'&amp; ',但这不会捕获输入中出现的所有&,但您可能会找到一些可以捕获的内容。

票数 5
EN

Stack Overflow用户

发布于 2012-10-22 17:07:03

在解析xml之前,我使用了Tidy框架

代码语言:javascript
运行
复制
final StringWriter errorMessages = new StringWriter();
final String res = new TidyChecker().doCheck(html, errorMessages);
...
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse(new InputSource(new StringReader(addRoot(html))));  
...

一切都很好

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3838316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档