java - Xalan 的 SAX 实现 - 字符串中的双重编码实体

标签 java xml

我正在使用 Sax 和 xalan 实现(v. 2.7.2)。我有 html 格式的字符串

" <p>Test k&quot;nnen</p>"

我必须将它传递给 xml 标签的内容。

结果是:

"&lt;p&gt;Test k&amp;quot;nnen&lt;/p&gt;"

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&quot;nnen</p>";
    transformerHandler.characters(data.toCharArray(),0,data.length( ));
    transformerHandler.endElement(null,"decimal","decimal");
    transformerHandler.endDocument( );

    return writer.toString( );
}}

最佳答案

如果您的输入是 XML,那么您需要解析它。然后<p></p>将被识别为标签,并且 &quot;将被识别为实体引用。

另一方面,如果您想将其视为字符串并通过 XML 机制传递它,则 "<""&"将被保留为普通字符,这意味着它们将被转义为 &lt;&amp;分别。

如果你想要"<"被视为普通角色,但 "&"如果按照 XML 含义进行处理,那么您需要具有某种人格 split 的软件,而您不会得到现成的软件。

关于java - Xalan 的 SAX 实现 - 字符串中的双重编码实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41013490/

相关文章:

python - 解析根元素内元素之间的 XML 文本

mysql - 从 DTD 文件制作 MySQL 表的问题

javascript - 使用javascript读取本地XML文件

android - float 操作按钮未在 Android 中显示图像?

java - 尝试在 Android Studio 中运行程序但出现错误,提示我的应用已停止工作

java - 从数组填充列表的不同方法

java - 服务单元测试

java - equals with strings 产生错误的结果

java - 如何在 Lambda 表达式中定义 Intent

java - json 到 HashMap<Date, Integer>