元素文本中带有"&"的XML解析问题

Chr*_*ght 12 java xml parsing

我有以下代码:

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)));
Run Code Online (Sandbox Code Playgroud)

并且解析了解析步骤:

SAXParseException: The entity name must immediately follow 
                   the '&' in the entity reference
Run Code Online (Sandbox Code Playgroud)

由于我的以下'&' inputXml:

<Line1>Day & Night</Line1>
Run Code Online (Sandbox Code Playgroud)

我无法控制入站XML.我怎样才能安全/正确地解析这个?

And*_*yle 35

很简单,输入"XML"不是有效的XML.该实体应编码,即:

<Line1>Day &amp; Night</Line1>
Run Code Online (Sandbox Code Playgroud)

基本上,除了告诉XML供应商他们给你垃圾并让他们修复它之外,没有"正确"的方法来解决这个问题.如果你处于某种可怕的情况,你必须处理它,那么你所采取的方法可能取决于你期望获得的价值范围.

如果文件中有没有实体可言,正则表达式替换&&amp;前处理会做的伎俩.但如果他们正确地发送了一些实体,你需要从匹配中排除这些实体.并且他们实际上想要发送实体代码的罕见机会(即发送&amp;但意味着&amp;amp;)你将完全失去运气.

但是嘿 - 无论如何这都是供应商的错,如果你想要修复无效输入并不是他们想要的,那么他们可以采取一些简单的方法来解决这个问题.:-)


Fly*_*179 5

您的输入XML不是有效的XML; 遗憾的是,您无法实际使用XML解析器来解析它.

在将文本传递给XML解析器之前,您需要预处理文本.虽然你可以做一个字符串替换,替换'& ''&amp; ',但这不会捕获&输入中的每一个出现,但你可能能够提出一些有用的东西.