2017-11-07 2 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(); 
    }