1

我正在尝试规范化我从 android 设备上的服务器收到的一些 xml。不过,Android 似乎并不喜欢org.apache.xml.security.c14n.Canonicalizer.canonicalize(String inputText). 这是因为 Android 的 DOM 库不喜欢DocumentBuilder.setValidating()(被 Canonicalizer 使用),它会自动抛出异常。我尝试直接从 Canonicalizer 复制代码,而没有那个麻烦的行:

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?

4

1 回答 1

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 。

于 2014-02-06T17:04:48.677 回答