繁体   English   中英

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 库,因为您一开始就不应该有这个需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM