将XML字符串解析为kXML元素

时间:2018-04-26 08:29:16

标签: android android-ksoap2 kxml2 kxml

我正在编写一个使用kSOAP2连接到SOAP Web服务的Android应用程序,我有一个kXML元素,我想根据我从其他地方获得的XML字符串(REST API)注入一个子元素。我有以下代码:

Element samlHeader = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "Security");
samlHeader.setPrefix("wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
samlHeader.setPrefix("wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");

String samlTokenString = ...; //I got this from elsewhere
Element samlTokenElement = ...; //I don't know how to build this
samlHeader.addChild(Node.ELEMENT, samlTokenElement);

所以我试图弄清楚如何基于我从其他地方获得的XML字符串来构建我的元素。

1 个答案:

答案 0 :(得分:3)

这是我们最终实施的解决方案:

try {
    KXmlParser parser = new KXmlParser();
    parser.setInput(new StringReader(samlTokenString));
    parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);

    Document samlTokenDocument = new Document();
    samlTokenDocument.parse(parser);
    samlHeader.addChild(Node.ELEMENT, samlTokenDocument.getRootElement());
} catch (XmlPullParserException e) {
    Log.e(TAG,"Could not parse SAML assertion", e);
} catch (IOException e) {
    Log.e(TAG,"Could not parse SAML assertion", e);
}

我们仍在验证它是否能产生正确的结果,但似乎有效。