2011-11-16 7 views
1

私はSOAPメッセージの応答コードの下にxpathを使用してSOAP応答を解析しようとしています。XPathを使用したSOAPレスポンスメッセージの解析

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<soapenv:Body> 
<ns1:Get__CompIntfc__CI_PERSONAL_DATAResponse 
xmlns:ns1="http://xmlns.oracle.com/Enterprise/Tools/schemas/M985361.V1"> 
<ns1:PROP_EMPLID>AA0001</ns1:PROP_EMPLID> 
<ns1:PROP_LAST_NAME>Adams</ns1:PROP_LAST_NAME><ns1:PROP_FIRST_NAME>Kimberly</ns1:PROP_FIRST_NAME> 
</ns1:Get__CompIntfc__CI_PERSONAL_DATAResponse > 
</soapenv:Body> 
</soapenv:Envelope> 

私はそれは、「AA0001」 必要な値を与えていないが、私はxpath.compile("//*/text()")を使用する場合、それは適切にすべてのテキストノードの値を出力します

DocumentBuilderFactory domFactory =DocumentBuilderFactory.newInstance(); 
    domFactory.setNamespaceAware(true); 
    DocumentBuilder builder = domFactory.newDocumentBuilder(); 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    response.writeTo(out); 
InputStream is = new ByteArrayInputStream(out.toByteArray()); 
Document doc = builder.parse(is); 
     XPathExpression expr = xpath.compile("//ns1:PROP_EMPLID/text()"); 
      Object res = expr.evaluate(doc, XPathConstants.NODESET); 
      NodeList nodes = (NodeList) res; 
    for (int i = 0; i < nodes.getLength(); i++) { 
    System.out.println(nodes.item(i).getNodeValue()); 
     } 

...のようにそれを解析してみてください。

私は応答からの特定の値をすべてのテキスト値ではないので、問題が何であるか教えてください。

+0

ノードの名前を間違って書きます(名前空間を含めます)。 この質問を確認する:http://stackoverflow.com/questions/112601/select-element-in-a-namespace-with-xpath – Zernike

答えて

1

あなたは接頭辞ns1によって表される名前空間内のノードを取得しようとしているが、あなたのアプリケーションを使用すると、任意の実際の名前空間でこの名前を関連付けられていないため、このプレフィックスは、何を表すかないアイデアを持っていません。 Javaでこれを行う方法(@newtoverのように)はjavax.xml.namespace.NamespaceContextのインスタンスをxpathオブジェクトに登録することです。このような何かを:

xpath.setNamespaceContext(namespaces); 

残念ながら、このインタフェースのデフォルトの実装はありません。あなたはあなた自身をロールバックする必要があります。完全な例は、ここで見つけることができます:

...または@のnewtoverのリンクをたどります。

関連する問題