1

重複の可能性:
要素に xmlns 属性がある場合、Xpath が失敗する

次のxmlから文字列を抽出しようと長い間試みてきましたが、うまくいきません http://chris.photobooks.com/xml/default.htm?state=8T

本の ASIN 番号を取得しようとしていますが、試してみました

$xpath->query('//MarketplaceASIN/ASIN')->item(0)->nodeValue;

$xpath->query('/GetMatchingProductResponse/GetMatchingProductResult[1]/Product/Identifiers/MarketplaceASIN/ASIN')->item(0)->nodeValue;

しかし、どちらも機能していないようです。ここで何が間違っていますか?

4

1 に答える 1

1

そのドキュメントの要素は名前空間にバインドされていますhttp://mws.amazonservices.com/schema/Products/2011-10-01

名前空間プレフィックスを使用せずxmlns="http://mws.amazonservices.com/schema/Products/2011-10-01"、属性のように見えるため、見逃している可能性がありますが、名前空間属性は特別です。

すべての子孫要素はその名前空間を継承します。名前空間を名前空間プレフィックスに登録し、XPathを調整する必要があります。

$rootNamespace = $xml->lookupNamespaceUri($xml->namespaceURI); 
$xpath->registerNamespace('a', $rootNamespace); 
$elementList = $xpath->query('//a:MarketplaceASIN/a:ASIN');

local-name()または、要素に一致し、述語フィルターを使用しておよびnamespace-uri():に一致するより一般的なXPathを使用することもできます。

//*[local-name()='MarketplaceASIN' and namespace-uri()='http://mws.amazonservices.com/schema/Products/2011-10-01']/*[local-name()='ASIN' and namespace-uri()='http://mws.amazonservices.com/schema/Products/2011-10-01']
于 2012-10-06T03:41:16.707 に答える