Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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
如何使用XMLStreamReader读取/写入Java ASCII字符值?_Java_Ascii_Xmlstreamreader_Xml Encoding_Xmlencoder - Fatal编程技术网

如何使用XMLStreamReader读取/写入Java ASCII字符值?

如何使用XMLStreamReader读取/写入Java ASCII字符值?,java,ascii,xmlstreamreader,xml-encoding,xmlencoder,Java,Ascii,Xmlstreamreader,Xml Encoding,Xmlencoder,我想使用XMLStreamReader来读取包含水平标签ASCII码 ,例如: foo ;条形码 并将其打印或写回另一个xml文件 Google告诉我在XMLInputFactory中将javax.xml.stream.isCoalescing设置为true,但我下面的测试代码并没有按预期工作 public static void main(String[] args) throws IOException, XMLStreamException { XMLInputFa

我想使用XMLStreamReader来读取包含水平标签ASCII码
	,例如:

foo	;条形码

并将其打印或写回另一个xml文件

Google告诉我在
XMLInputFactory
中将
javax.xml.stream.isCoalescing
设置为
true
,但我下面的测试代码并没有按预期工作

public static void main(String[] args) throws IOException, XMLStreamException {
    XMLInputFactory factory = XMLInputFactory.newInstance();
    factory.setProperty(factory.IS_COALESCING, true);

    System.out.println("IS_COALESCING supported ? " + factory.isPropertySupported(factory.IS_COALESCING));
    System.out.println("factory IS_COALESCING value is " +factory.getProperty(factory.IS_COALESCING));

    String rawString = "<tag>foo&#009;bar</tag>";
    XMLStreamReader reader = factory.createXMLStreamReader(new StringReader(rawString));
    System.out.println("reader IS_COALESCING value is " +reader.getProperty(factory.IS_COALESCING));

    PrintWriter pw = new PrintWriter(System.out, true);
    while (reader.hasNext())
    {
        reader.next();
        pw.print(reader.getEventType());
        if (reader.hasText())
            pw.append(' ').append(reader.getText());
        pw.println();
    }
}
但我想保留相同的水平选项卡,如:

IS_COALESCING supported ? true
factory IS_COALESCING value is true
reader IS_COALESCING value is true
1
4 foo&#009;bar
2
8

我错过了什么?谢谢

据我所见,解析部分是正确的-只是没有按照您的设想打印出来。XML读取器将unicode编码解释为
\t
,并相应地用Java表示

使用Guava的XmlEscapers,我可以制作出类似于您想要的东西:

公共类测试{
公共静态void main(字符串[]args)引发IOException、XMLStreamException{
XMLInputFactory=XMLInputFactory.newInstance();
setProperty(XMLInputFactory.IS_COALESCING,true);
System.out.println(“是否支持合并?”+factory.isProperty支持(XMLInputFactory.IS_合并));
System.out.println(“factory IS_COALESCING值为”+factory.getProperty(XMLInputFactory.IS_COALESCING));
String rawString=“foo	;bar”;
XMLStreamReader=factory.createXMLStreamReader(新StringReader(rawString));
System.out.println(“reader IS_COALESCING值为”+reader.getProperty(XMLInputFactory.IS_COALESCING));
PrintWriter pw=新的PrintWriter(System.out,true);
while(reader.hasNext()){
reader.next();
print(reader.getEventType());
if(reader.hasText()){
append(“”).append(xmleescapers.xmlAttributeEscaper().escape(reader.getText());
}
println();
}
}
输出如下所示:

IS_COALESCING supported ? true
factory IS_COALESCING value is true
reader IS_COALESCING value is true
1
4 foo&#x9;bar
2
8
对此有几点看法:

  • 库本身被标记为不稳定,可能还有其他选择
  • \t
    不需要在XML内容中转义,因此我必须选择属性转换器。虽然它可以工作,但可能会有一些副作用
  • 真的需要100%的内容拷贝吗?否则,我建议让XML库完成它们的工作,并让它们创建正确的编码。
    • 如果您确实想要1:1的副本,是否可以将输入指定为
      CDATA
IS_COALESCING supported ? true
factory IS_COALESCING value is true
reader IS_COALESCING value is true
1
4 foo&#x9;bar
2
8