2010-02-23 32 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

相關問題