3

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");
4

1 に答える 1

2

解決策

.1。このコードを追加します:

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

.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

Evaluatorは、「名前空間なし」にある要素を見つけようとしますが、ドキュメント内wmHotelAvailResponseの唯一のwmHotelAvailResponse要素が「http://host.com/subPath」名前空間に属しているために失敗します。

于 2012-08-20T12:22:12.837 に答える