java StAX 解析器:不保留属性的双引号
java StAX parser: not preserving double quotes for attributes
StAX 解析器正在将 双引号 周围的属性转换为 单引号 XMLEventReader
使用的数据模型。这很好,但是如果我想打印回 XML,也许只选择原始 XML 的一个片段,输出将不一样。
输入文件:
<root>
<mySubTrees>
<mySubTree>
<a property="target">
<aa>123</aa>
</a>
<b>456</b>
<c>789</c>
</mySubTree>
</mySubTrees>
</root>
代码:
@Test
public void test_getXmlFragment() throws Exception {
byte[] fileContent = getXMLBytes();
String xmlFragment = "";
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader eventReader = factory.createXMLEventReader(new ByteArrayInputStream(fileContent));
while (eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
xmlFragment += event;
}
System.out.println(xmlFragment);
}
private byte[] getXMLBytes() throws IOException {
InputStream inputStream = this.getClass().getResource(PREFIX_XML_FILES + "/sss.xml").openStream();
byte[] fileContent = new byte[inputStream.available()];
inputStream.read(fileContent);
inputStream.close();
return fileContent;
}
输出:
<?xml version="null" encoding='UTF-8' standalone='no'?>
<root>
<mySubTrees>
<mySubTree>
<a property='target'>
<aa>123</aa>
</a>
<b>456</b>
<c>789</c>
</mySubTree>
</mySubTrees>
</root>
期望的输出:
<?xml version="null" encoding="UTF-8" standalone="no"?>
<root>
<mySubTrees>
<mySubTree>
<a property="target">
<aa>123</aa>
</a>
<b>456</b>
<c>789</c>
</mySubTree>
</mySubTrees>
</root>
有什么办法可以微调吗?
没有。单引号和双引号包裹的属性没有区别,要求两者有区别是不合理的要求。
StAX 的工作不是保留它正在读取的 XML 文件语法。 StAX 是一个解析器,它的工作是中继它正在读取的 XML 中表达的数据模型。它正在完美地完成这项工作。
像您这样的要求可能会迫使您编写自己的 XML 库,因为您一开始就不应该有此要求。
StAX 解析器正在将 双引号 周围的属性转换为 单引号 XMLEventReader
使用的数据模型。这很好,但是如果我想打印回 XML,也许只选择原始 XML 的一个片段,输出将不一样。
输入文件:
<root>
<mySubTrees>
<mySubTree>
<a property="target">
<aa>123</aa>
</a>
<b>456</b>
<c>789</c>
</mySubTree>
</mySubTrees>
</root>
代码:
@Test
public void test_getXmlFragment() throws Exception {
byte[] fileContent = getXMLBytes();
String xmlFragment = "";
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader eventReader = factory.createXMLEventReader(new ByteArrayInputStream(fileContent));
while (eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
xmlFragment += event;
}
System.out.println(xmlFragment);
}
private byte[] getXMLBytes() throws IOException {
InputStream inputStream = this.getClass().getResource(PREFIX_XML_FILES + "/sss.xml").openStream();
byte[] fileContent = new byte[inputStream.available()];
inputStream.read(fileContent);
inputStream.close();
return fileContent;
}
输出:
<?xml version="null" encoding='UTF-8' standalone='no'?>
<root>
<mySubTrees>
<mySubTree>
<a property='target'>
<aa>123</aa>
</a>
<b>456</b>
<c>789</c>
</mySubTree>
</mySubTrees>
</root>
期望的输出:
<?xml version="null" encoding="UTF-8" standalone="no"?>
<root>
<mySubTrees>
<mySubTree>
<a property="target">
<aa>123</aa>
</a>
<b>456</b>
<c>789</c>
</mySubTree>
</mySubTrees>
</root>
有什么办法可以微调吗?
没有。单引号和双引号包裹的属性没有区别,要求两者有区别是不合理的要求。
StAX 的工作不是保留它正在读取的 XML 文件语法。 StAX 是一个解析器,它的工作是中继它正在读取的 XML 中表达的数据模型。它正在完美地完成这项工作。
像您这样的要求可能会迫使您编写自己的 XML 库,因为您一开始就不应该有此要求。