Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaStax解析器:不为属性保留双引号_Java_Xml_Attributes_Stax - Fatal编程技术网

JavaStax解析器:不为属性保留双引号

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(

StAX解析器正在将
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的要求并不坏。