2010-02-23 28 views
4

嘿,我试图使用VTD-XML来解析给它作为一个字符串的XML,但我找不到如何做到这一点。任何帮助,将不胜感激。VTD-XML可以将字符串作为输入吗?

http://vtd-xml.sourceforge.net

+3

我是vtd-xml的作者,我们支持我们在这方面的声明...有很多人已经测试了vtd-xml,并且对它印象深刻......所以我对你的建议是不要让任何关于你不知道的任何过早陈述..我很乐意向你介绍vtd-xml是什么......谢谢! – 2010-02-23 20:00:41

回答

5

看来VTD-XML库让你读字节数组数据。我建议在这种情况下,使用正确的编码将字符串转换为字节。

如果有在XML字符串的开头信号的编码:

<?xml version="1.0" encoding="UTF-8"?> 

然后使用:

myString.getBytes("UTF-8") 

如果有没有编码,请使用之一,VTD-XML知道如何解码字节:

String withHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + myString; 
byte[] bytes = withHeader.getBytes("UTF-8"); 
VTDGen vg = new VTDGen(); 
vg.setDoc(bytes); 
vg.parse(true); 

注意的是,在后一种情况下,你可以使用任何有效的编码,因为日你在内存中使用的字符串是encoding-agnosting(它是UTF-16,但是当你要求它将被转换的字节时)。

+0

然后我用什么方法加载它? setDoc? – Concept 2010-02-23 16:58:38

+0

是的,使用setDoc在转换后工作 – 2010-02-23 20:04:11

+0

得到它的工作。谢谢!是的,它是一个Java String对象,它是一个非常快速的解析器,并且我对SAX需要的if语句块不满意。整个令牌布局非常方便。 – Concept 2010-02-26 14:02:00

2

VTD-XML不接受字符串,因为字符串意味着UCS-16编码,这意味着它不是一个真正的xml文档。根据规范定义,xml通常以utf-8,ascii,iso -8859-1或UTF-16LE或BE格式...我的回答有意义吗?

+1

不是真的...您在标头中定义xml文件的编码。并且一个字符串在UCS-16中以内存编码,但您可以将其转换为匹配所需的编码。 – helios 2010-02-24 00:06:25

+0

如果通过字符串你的意思是java的字符串对象,那么我支持我的答案...如果字符串你的意思是一个字节数组,那么你是正确的使用决定编码...我觉得这个问题是真的关于问关于Java的字符串对象,但我可能是错的 – 2010-02-24 03:49:25

+2

你的回答是否有意义?不可以。根据helios的回答,这个字符串可能包含一个声明编码的序言。因此,要将字符串转换为适合解析器使用的字节,您必须首先提取该编码,正如helios所说。但通常,解析器的工作是确定编码。我经常使用的所有解析器都可以接受Reader作为输入,这意味着解析器可以忽略编码问题,因为它已经获取了字符。因此,如果VTD-XML没有解析Reader的方法,那么它就不是“先进和强大的”。 – 2010-02-25 20:49:46

相关问题