我必须解析Java中的一堆XML文件,这些文件有时且无效地包含HTML实体,例如—
,>
等等。我了解解决此问题的正确方法是在解析之前向XML文件添加合适的实体声明。但是,我无法做到这一点,因为我无法控制那些XML文件。
每当Java XML解析器遇到这样的实体时,是否存在我可以重写的某种回调?我无法在API中找到一个。
我想使用:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = dbf.newDocumentBuilder();
Document doc = parser.parse( stream );
我发现可以resolveEntity
在中重写org.xml.sax.helpers.DefaultHandler
,但是如何将其与更高级别的API一起使用?
这是一个完整的示例:
public class Main {
public static void main( String [] args ) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = dbf.newDocumentBuilder();
Document doc = parser.parse( new FileInputStream( "test.xml" ));
}
}
与test.xml:
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar>Some text — invalid!</bar>
</foo>
产生:
[Fatal Error] :3:20: The entity "nbsp" was referenced, but not declared.
Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 20; The entity "nbsp" was referenced, but not declared.
更新:我一直在使用调试器在JDK源代码中四处逛逛,伙计,这是多少意大利面。我不知道那里有什么设计,或者是否有一个。一层洋葱可以互相叠放多少层?
他们的关键类似乎是com.sun.org.apache.xerces.internal.impl.XMLEntityManager
,但是我找不到任何可以在使用前向其中添加内容的代码,或者试图不通过该类而尝试解析实体的代码。
//jsoup.org/download
public static void main(String args[]){
String html = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><foo>" +
"<bar>Some text — invalid!</bar></foo>";
Document doc = Jsoup.parse(html, "", Parser.xmlParser());
for (Element e : doc.select("bar")) {
System.out.println(e);
}
}
结果:
<bar>
Some text — invalid!
</bar>
从文件加载可以在这里找到:
http://jsoup.org/cookbook/input/load-document-from-
file
我正在尝试使用DOMParser解析带有HTML字符串的XML文件。问题是getTextContent()方法只获取文本,而不获取其中的任何HTML标记。我希望字符串按原样返回,而不是按解析后的版本返回。我搜索了整个网络,却找不到任何对我有帮助的东西。顺便说一句,我无法对HTML字符串进行任何更改,因为在大约500个文件中有超过100k个Sting。 测验xml文件 Java模块 实际输出 这里有
问题内容: 什么HTML解析器具有以下功能: 快速 线程安全 可靠且无错误 解析HTML和XML 处理错误的HTML 有一个DOM实现 支持HTML4,JavaScript和CSS标签 相对简单的面向对象的API 您认为哪种解析器更好? 谢谢。 问题答案: ApacheTika是最佳选择。Apache最近从现有项目中提取了许多子项目并将其公开。提卡(Tika)是其中之一,以前是Apache Luc
问题内容: 我想解组一个包含数据集合的xml文件,像这样 我们知道这可以通过两个类完成:人员,使用Castor的人员,JAXB或其他框架。 但是,如果不编写收集类的Persons怎么办? 问题答案: 寻找一种方法来告诉Castor您希望它生成一个Person实例。 http://www.castor.org/how-to-map-a-list-at- root.html
我真的希望你能在这件事上帮我....我需要从我的xml文件中获取特定的数据,但我卡在了一个点上,我不知道如何继续... 我想从网络获得:网络名称;From代码:mcc和mnc代码;From设置:名称、id、类型、参数名称、值; 这就是我的xml文件的结构: 这就是我目前掌握的......我真的不能再继续下去了...在字符串content=CNode.GetLastChild().GetTextCo
我试图确定.NET核心应用程序是否容易受到XML外部实体(XXE)注入攻击。我读了这个OWASP XXE预防备忘单,它告诉我,例如,在4.5.2之前的.NET Framework版本中,
问题内容: 我目前正在使用DOM解析器来解析XHTML文档,例如: 我的问题是,当我的文档包含一个实体引用时,例如: 我的解析器为包含“€”而不是“&euro;”的内容创建了一个Text节点。这就是说,它正在按预期的方式解析实体(XHTML 1.0 Strict DTD链接到ENTITIES Latin1 DTD,这反过来确定了“&euro;”与“€”的对等)。 问题是,我不希望解析器执行此类操作