2012-06-27 77 views
1

我想要規範化我從android設備上的服務器接收到的一些xml。不過,Android似乎並不喜歡org.apache.xml.security.c14n.Canonicalizer.canonicalize(String inputText)。這是因爲Android的DOM庫不喜歡DocumentBuilder.setValidating()(由Canonicalizer使用),它會自動拋出異常。 我試圖直接從Canonicalizer複製代碼,而無需麻煩的線路:Android XML規範化

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
InputSource in = new InputSource(new ByteArrayInputStream(inputBytes)); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
Document doc = db.parse(in); 
byte result[] = Canonicalizer.getInstance(canonicalizationMethod).canonicalizeSubtree(doc); 

然而,這未能正確規範化它的XML標籤裏面的屬性不會重新排序,先有命名空間,因爲它應該。

有沒有其他方法可以在android上實際規範化xml?

回答

1

我有同樣的問題,並最終以下列方式使用http://www.xom.nu/apidocs/nu/xom/canonical/Canonicalizer.html代替:

InputStream is = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); 
Builder parser = new Builder(); 
Document doc = parser.build(is); 
ByteArrayOutputStream canonicalOs = new ByteArrayOutputStream(); 
Canonicalizer canonicalizer = new Canonicalizer(canonicalOs); 
canonicalizer.write(doc);  
byte[] canonXmlBytes = canonicalOs.toByteArray(); 

在「libs'文件夾包含http://www.cafeconleche.org/XOM/xom-1.2.10.jar