Java 构建org.w3c.dom.Document时剥离的HTML字符实体
我有一个Java XML实用程序类。Java 构建org.w3c.dom.Document时剥离的HTML字符实体,java,xml,character-entities,Java,Xml,Character Entities,我有一个Java XML实用程序类。buildDocument()方法接受XML字符串并返回org.w3c.dom.Document。我要传递给它的特定XML是一个XHTML1.1文档 问题是如果有HTML命名的实体,比如 <p>Preserve dagger †</p> 我认为这些是相关的依赖关系 <dependency> <groupId>net.sf.saxon</groupId> <
buildDocument()
方法接受XML字符串并返回org.w3c.dom.Document
。我要传递给它的特定XML是一个XHTML1.1文档
问题是如果有HTML命名的实体,比如
<p>Preserve dagger †</p>
我认为这些是相关的依赖关系
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
<version>9.5.1-6</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.11.0</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>xml-resolver</groupId>
<artifactId>xml-resolver</artifactId>
<version>1.2</version>
<type>jar</type>
</dependency>
net.sf.saxon
萨克森河
9.5.1-6
薛西斯
干细胞移植
2.11.0
罐子
xml解析器
xml解析器
1.2
罐子
关于如何保护这些实体有什么想法吗?谢谢,/w我花了一些时间才找到这个问题的解决方案,显然很难找到正确的关键字。。。因为我在找到最佳答案之前找到了这个,所以我认为它值得链接到这里,即使它在StackOverflow上。好了:
这不是很令人满意,但至少它很好地解释了为什么没有更好的解决方案。看看这个@Naren,我通读了这个问题,我不确定它是否适用于这种情况。我已关闭DTD验证。希望通过所有实体。我一直在研究实体解析器-只是不确定如何实现它,或者它是否能解决这个问题。当我设置实体解析器时,
resolverentity(publicId,systemId)
方法从未被调用。我试图打开dtd加载,但必须修复其他级联异常。
package com.example;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
public final class XMLUtils {
private XMLUtils() {
}
public static Document buildDocument(String xml) throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory domFactory = DocumentBuilderFactory
.newInstance();
domFactory.setNamespaceAware(true);
domFactory.setFeature("http://xml.org/sax/features/validation", false);
domFactory.setFeature(
"http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
domFactory.setFeature(
"http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
domFactory.setCoalescing(false);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(new ByteArrayInputStream(
xml.getBytes(StandardCharsets.UTF_8)));
try {
DOMSource domSource = new DOMSource(doc);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(domSource, result);
System.out.println("XML OUT: \n" + writer.toString());
} catch (Exception ex) {
}
return doc;
}
}
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
<version>9.5.1-6</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.11.0</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>xml-resolver</groupId>
<artifactId>xml-resolver</artifactId>
<version>1.2</version>
<type>jar</type>
</dependency>