如何使用XMLStreamReader读取/写入Java ASCII字符值?
我想使用XMLStreamReader来读取包含水平标签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
代码>,例如:
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	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	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	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	bar
2
8