Добавление пространств имен в AXIOMXPath

XML:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <wmHotelAvailResponse xmlns="http://host.com/subPath">
      <OTA_HotelAvailRS Version="1.001">
      </OTA_HotelAvailRS>
    </wmHotelAvailResponse>
  </soap:Body>
</soap:Envelope>

Код:

String  xpathString = "/soap:Envelope/soap:Body/wmHotelAvailResponse/OTA_HotelAvailRS";

AXIOMXPath xpathExpression = new AXIOMXPath(xpathString);

xpathExpression.addNamespace("soap",    "http://schemas.xmlsoap.org/soap/envelope/");
xpathExpression.addNamespace("xsi",     "http://www.w3.org/2001/XMLSchema-instance");
xpathExpression.addNamespace("xsd",     "http://www.w3.org/2001/XMLSchema");


OMElement rsMsg = (OMElement)xpathExpression.selectSingleNode(documentElement);

String version = rsMsg.getAttribute(new QName("Version")).getAttributeValue();

Вопрос:
Это прекрасно работает, когда xmlns="http://host.com/subPath" часть удалена. Я хочу знать, как я могу добавить xmlns="http://host.com/subPath" часть к xpathExpression сделать вышеупомянутую работу

Я попробовал ниже, но не сработало.

xpathExpression.addNamespace("", "http://host.com/subPath");

1 ответ

Решение

Решение:

0,1. Добавьте этот код:

xpathExpression.addNamespace("x", "http://host.com/subPath");

0,2. Изменить:

String  xpathString = "/soap:Envelope/soap:Body/wmHotelAvailResponse/OTA_HotelAvailRS"; 

к:

String  xpathString = "/soap:Envelope/soap:Body/x:wmHotelAvailResponse/x:OTA_HotelAvailRS";  

Пояснение:

Xpath всегда обрабатывает любое имя без префикса как принадлежащее "без пространства имен".

Поэтому при оценке выражения XPath:

/soap:Envelope/soap:Body/wmHotelAvailResponse/OTA_HotelAvailRS

Оценщик пытается найти wmHotelAvailResponse элемент, который находится в "нет пространства имен" и не работает, потому что единственный wmHotelAvailResponse элемент в документе принадлежит пространству имен "http://host.com/subPath".

Другие вопросы по тегам