JavaStax解析器:不为属性保留双引号
StAX解析器正在将JavaStax解析器:不为属性保留双引号,java,xml,attributes,stax,Java,Xml,Attributes,Stax,StAX解析器正在将XMLEventReader使用的数据模型中的双引号属性转换为单引号。这很好,但是如果我想打印回XML,可能只选择原始XML的一个片段,那么输出将不一样 输入文件: 123 456 789 代码: @测试 public void test_getXmlFragment()引发异常{ byte[]fileContent=getXMLBytes(); 字符串xmlFragment=“”; XMLInputFactory=XMLInputFactory.newInstance(
XMLEventReader
使用的数据模型中的双引号属性转换为单引号。这很好,但是如果我想打印回XML,可能只选择原始XML的一个片段,那么输出将不一样
输入文件:
123
456
789
代码:
@测试
public void test_getXmlFragment()引发异常{
byte[]fileContent=getXMLBytes();
字符串xmlFragment=“”;
XMLInputFactory=XMLInputFactory.newInstance();
XMLEventReader eventReader=factory.createXMLEventReader(新的ByteArrayInputStream(fileContent));
while(eventReader.hasNext()){
XMLEvent=eventReader.nextEvent();
xmlFragment+=事件;
}
System.out.println(xmlFragment);
}
私有字节[]getXMLBytes()引发IOException{
InputStream InputStream=this.getClass().getResource(前缀为“/sss.XML”).openStream();
字节[]文件内容=新字节[inputStream.available()];
读取(文件内容);
inputStream.close();
返回文件内容;
}
输出:
123
456
789
期望输出:
123
456
789
有没有办法对此进行微调?没有。用单引号或双引号括起来的属性之间没有区别,要求两者之间有区别是不合理的 StAX的工作不是保留它正在读取的XML文件语法。StAX是一个解析器,它的工作是传递用它正在读取的XML表示的数据模型。它正在完美地完成这项工作
像您这样的需求可能会迫使您编写自己的XML库,因为您首先不应该有这个需求。不幸的是,读取这些文件的系统需要双引号,我不得不求助于使用xslt和模板来解决这个问题,即在解析前后保留语法。有更好的办法吗?基本上,我所需要做的就是:1)读取xml文件2)将其拆分-在某些父节点下,每个子树一个文件thanks@w.l.XSLT能够做到这一点很奇怪,但如果目标是使用双引号,而不是保留与原始引号相同的引号,然后,您可以使用任何XML输出技术,并指示它在属性周围加双引号。这通常是一个可用的化妆品功能。正如我所说的,这是一个不合理的要求,没有专业的工具链会鼓励您使用它。如果你能绕过它并且它是安全的,那么这是最有效的方法。否则,你所能做的就是编写你自己的工具。-1因为这个问题的答案毫无意义。它指出的问题是为什么
StAX
不满足反射特性。从属性上使用双引号的XML文档读取时,如果再次打印XMLEventReader
,它将以单引号打印。而且似乎没有办法告诉XMLEventReader使用双引号。我认为StAX
做得很好,但是能够生成相同的初始xml的要求并不坏。