2017-11-07 8 views
0

私は以下のような特定のStringレスポンスを持っています。doc要素は、文字列をXMLに変換するときにnullを返します

<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns:listUsersResponse xmlns:ns="http://org.apache.axis2/xsd" xmlns:ax2754="http://common.mgt.user.carbon.wso2.org/xsd"><ns:return>admin</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>user1</ns:return><ns:return>user1234</ns:return><ns:return>[email protected]</ns:return><ns:return>user2</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>ushani01</ns:return></ns:listUsersResponse></soapenv:Body></soapenv:Envelope> 

この文字列をXMLに変換する必要があります。

以下は私のコードです。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder; 

    try 
    { 
     builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse(new InputSource(new StringReader(outputString))); 

     System.out.println(" doc >>>"); 
     System.out.println(doc); 
     NodeList nodeList = doc.getElementsByTagName("ns:listUsersResponse xmlns:ns=\"http://org.apache.axis2/xsd\" xmlns:ax2754=\"http://common.mgt.user.carbon.wso2.org/xsd"); 

     System.out.println(" nodeList >>>"); 
     System.out.println(nodeList); 

     if (nodeList.getLength() > 0) { 
      Element element = (Element)nodeList.item(0); 
      System.out.println(element.getElementsByTagName("ns:return") 
        .item(0).getTextContent()); 
     } else { 
      System.out.println(" crazy >>>"); 
     } 



    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

以下は私の出力です。

outputString >>> 
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns:listUsersResponse xmlns:ns="http://org.apache.axis2/xsd" xmlns:ax2754="http://common.mgt.user.carbon.wso2.org/xsd"><ns:return>admin</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>user1</ns:return><ns:return>user1234</ns:return><ns:return>[email protected]</ns:return><ns:return>user2</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>[email protected]</ns:return><ns:return>ushani01</ns:return></ns:listUsersResponse></soapenv:Body></soapenv:Envelope> 
doc >>> 
[#document: null] 
nodeList >>> 
[email protected] 
crazy >>> 

私はここで混乱していますか?私のドキュメントはnullを返すので。 ヘルプをよろしくお願いします。

おかげで、すべての

答えて

0

まず、あなたのXML名前空間が含まれています、したがって、あなたはDocumentを作成するときに、アカウントの名前空間に取るようにDocumentBuilderFactoryに指示する必要があります。

factory.setNamespaceAware(true); 

次に、ノードを選択する際に考慮に名前空間を取る方法getElementsByTagNameNSを使用する必要があります。

NodeList nodeList = doc.getElementsByTagNameNS("http://org.apache.axis2/xsd", "listUsersResponse"); 

最後に、あなたが変換をする必要がありますStringとしてXML Nodeの内容を印刷するためにNodeに適用されます。

System.out.println(nodeToString(doc)); 

private static String nodeToString(Node node) throws TransformerConfigurationException, TransformerException { 
     TransformerFactory transFactory = TransformerFactory.newInstance(); 
     Transformer transformer = transFactory.newTransformer(); 
     StringWriter buffer = new StringWriter(); 
     transformer.transform(new DOMSource(node), new StreamResult(buffer)); 
     return buffer.toString(); 
    } 
関連する問題