我有以下代码:
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 & Night</Line1>
Run Code Online (Sandbox Code Playgroud)
基本上,除了告诉XML供应商他们给你垃圾并让他们修复它之外,没有"正确"的方法来解决这个问题.如果你处于某种可怕的情况,你必须处理它,那么你所采取的方法可能取决于你期望获得的价值范围.
如果文件中有没有实体可言,正则表达式替换&用&前处理会做的伎俩.但如果他们正确地发送了一些实体,你需要从匹配中排除这些实体.并且他们实际上想要发送实体代码的罕见机会(即发送&但意味着&amp;)你将完全失去运气.
但是嘿 - 无论如何这都是供应商的错,如果你想要修复无效输入并不是他们想要的,那么他们可以采取一些简单的方法来解决这个问题.:-)
您的输入XML不是有效的XML; 遗憾的是,您无法实际使用XML解析器来解析它.
在将文本传递给XML解析器之前,您需要预处理文本.虽然你可以做一个字符串替换,替换'& '为'& ',但这不会捕获&输入中的每一个出现,但你可能能够提出一些有用的东西.