我已经尝试了很长时间从以下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;
但似乎都不起作用,我在这里做错了什么?
答案 0 :(得分:1)
该文档中的元素绑定到命名空间http://mws.amazonservices.com/schema/Products/2011-10-01
。
您可能错过了它,因为它不使用名称空间前缀,xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01"
看起来像属性,但名称空间属性是特殊的。
所有后代元素都继承该命名空间。您将需要使用namespace-prefix注册命名空间并调整XPath:
$rootNamespace = $xml->lookupNamespaceUri($xml->namespaceURI);
$xpath->registerNamespace('a', $rootNamespace);
$elementList = $xpath->query('//a:MarketplaceASIN/a:ASIN');
或者您可以使用与元素匹配的更通用的XPath,并使用谓词过滤器来匹配local-name()
和namespace-uri()
:
//*[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']