2015-08-12 2 views
0

Я создал клиент веб-службы Axis2. Отклик возвращается в:axiom xpath addnamespace не работает

<GetOpenPOsResponse xmlns="https://www.mycompany.net/"> 
<GetOpenPOsResult> 
    <acXML xmlns="https://www.mycompany.net/acXMLSchema.xsd" lang="en-us"> 
     <Header> 
      <From> 
       <Company>Company Name</Company> 
       <Identity>Id</Identity> 
       <DatabaseName>Database</DatabaseName> 
      </From> 
     </Header> 
     <Request/> 
    </acXML> 
</GetOpenPOsResult> 

Я могу выбрать узлы с помощью XPath, если я использую следующее:

OMElement result = sender.sendReceive(); 
StAXOMBuilder builder = new StAXOMBuilder(result.getXMLStreamReader()); 
OMElement root = builder.getDocumentElement(); 

AXIOMXPath xpath = new AXIOMXPath("/*[name()='GetOpenPOsResponse']/*[name()='GetOpenPOsResult']/*[name()='acXML']/*[name()='Header']/*[name()='From']/*[name()='Company']"); 
OMElement selectedNode = (OMElement) xpath.selectSingleNode(root); 
System.out.println(selectedNode.getText()); 

Это возвращает: Название компании

Но я необходимо упростить выражение xpath с использованием пространств имен следующим образом:

xpath.addNamespace("y", "https://www.mycompany.net"); 
xpath.addNamespace("x", "https://www.mycompany.net/acXMLSchema.xsd"); 

и изменить выражение XPath для:

AXIOMXPath xpath = new AXIOMXPath("/y:GetOpenPOsResponse/y:GetOpenPOsResult/x:acXML/x:Header/x:From/x:Company"); 

Но выбирая узел таким образом возвращает нуль. Я видел другие решения, в которых этот подход должен работать, но я не могу заставить его работать для меня.
Что я делаю неправильно?

Thank you.

ответ

0

Это работает отлично, как и должно быть - когда я исправил пространство имен для «https://www.mycompany.net». Я забыл «/» в конце.

xpath.addNamespace("y", "https://www.mycompany.net/"); 
Смежные вопросы