gpt4 book ai didi

java - XMLStreamWriter 输出无效字符(不编码换页)

转载 作者:行者123 更新时间:2023-11-30 11:25:16 26 4
gpt4 key购买 nike

我在默认 Java 实现中使用 XMLOutputFactory,当输出的文本有换页时,它会生成一个无效的 XML 文件。显然,换页字符必须转义,但 XML 编写器不会转义它。 (也许还有其他应该被转义的字符,也没有被转义)。

这是一个错误吗?是否有解决方法,或者是否有我可以提供给 XML 编写器以更改行为的参数?

我正在写的文本可能有换页,我想将它输出到 XML 中,以便稍后阅读。

这是我的示例代码,\f 是换页符,两者都完全按照 ASCII 12(换页符)编写,没有被转义。当我将输出提供给 XML 解析器时,我在尝试读取换页时遇到错误,“发现无效的 XML 字符(Unicode:0xc)”。

public static void main(String[] args) throws XMLStreamException, FileNotFoundException, Exception {
XMLOutputFactory factory = XMLOutputFactory.newInstance();

try {
XMLStreamWriter writer = factory.createXMLStreamWriter(
new java.io.FileWriter("d:/xyz/ImportXml/out1.xml"));

writer.writeStartDocument();
writer.writeCharacters("\n");
writer.writeStartElement("document");
writer.writeCharacters("\n");
writer.writeCharacters("some text character value \"of the\" field & more text \f in <brackets> here.");
writer.writeCharacters("\n");
writer.writeStartElement("data");
writer.writeAttribute("name", "value \"of the\" field & more text \f in <brackets> here.");
writer.writeEndElement();
writer.writeCharacters("\n");
writer.writeEndElement();
writer.writeCharacters("\n");
writer.writeEndDocument();

writer.flush();
writer.close();

} catch (XMLStreamException e) {
e.printStackTrace();
} catch (java.io.IOException e) {
e.printStackTrace();
}
}

最佳答案

不是错误。这是一个特点。您可以添加字符验证或自己实现 XMLStreamWriter 接口(interface)。

Oracle 文档 http://docs.oracle.com/javase/7/docs/api/javax/xml/stream/XMLStreamWriter.html说:

The XMLStreamWriter does not perform well formedness checking on its input. However the writeCharacters method is required to escape & , < and > For attribute values the writeAttribute method will escape the above characters plus " to ensure that all character content and attribute values are well formed.

对应http://www.w3.org/TR/xml11/#charsetsxml 的限制字符为 [#x1-#x8]、[#xB-#xC]、[#xE-#x1F]、[#x7F-#x84]、[#x86-#x9F]

"\f"是代码为 #x0C 的字符。

关于java - XMLStreamWriter 输出无效字符(不编码换页),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20335496/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com