我正在使用 Sax 和 xalan 实现(v. 2.7.2)。我有 html 格式的字符串
" <p>Test k"nnen</p>"
我必须将它传递给 xml 标签的内容。
结果是:
"<p>Test k&quot;nnen</p>"
xalan 对 & 符号进行编码,尽管它是已转义实体的一部分。 任何人都知道如何让 xalan 理解转义实体而不转义他们的&符号?
可能的解决方案之一是将startCDATA()添加到transformerHandler,但这不是我的代码中可以使用的东西。
public class TestSax{
public static void main(String[] args) throws TransformerConfigurationException, SAXException {
TestSax t = new TestSax();
System.out.println(t.createSAXXML());
}
public String createSAXXML() throws SAXException, TransformerConfigurationException {
Writer writer = new StringWriter( );
StreamResult streamResult = new StreamResult(writer);
SAXTransformerFactory transformerFactory =
(SAXTransformerFactory) SAXTransformerFactory.newInstance( );
String data = null;
TransformerHandler transformerHandler =
transformerFactory.newTransformerHandler( );
transformerHandler.setResult(streamResult);
transformerHandler.startDocument( );
transformerHandler.startElement(null,"decimal","decimal", null);
data = " <p>Test k"nnen</p>";
transformerHandler.characters(data.toCharArray(),0,data.length( ));
transformerHandler.endElement(null,"decimal","decimal");
transformerHandler.endDocument( );
return writer.toString( );
}}
最佳答案
如果您的输入是 XML,那么您需要解析它。然后<p>
和</p>
将被识别为标签,并且 "
将被识别为实体引用。
另一方面,如果您想将其视为字符串并通过 XML 机制传递它,则 "<"
和"&"
将被保留为普通字符,这意味着它们将被转义为 <
和&
分别。
如果你想要"<"
被视为普通角色,但 "&"
如果按照 XML 含义进行处理,那么您需要具有某种人格 split 的软件,而您不会得到现成的软件。
关于java - Xalan 的 SAX 实现 - 字符串中的双重编码实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41013490/