有时候我们用 xpath 查找的时候,就算我们输入正确的路径,我们也有可能没有找到正确的内容。
如下面的 xml<ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
<Items>
<Request>
<IsValid>True</IsValid>
<ItemLookupRequest>
<IdType>UPC</IdType>
<ItemId>014100087847</ItemId>
<ResponseGroup>Large</ResponseGroup>
<SearchIndex>All</SearchIndex>
<VariationPage>All</VariationPage>
</ItemLookupRequest>
</Request>
<Items>
如果我们定义 xpath 为 //ItemLookupResponse/Items
我们是不能返回正确的节点的。
这是因为这个 XML 文件中定义了命名空间。
Dom4j 针对有命名空间的访问英国使用下面的方法。[code]Element root = document.getRootElement();
// Element foo = root.element( “//Request” );
Map<String, String> namespaceUris = new HashMap<String, String>();
namespaceUris.put("Amazon", "http://webservices.amazon.com/AWSECommerceService/2011-08-01");
XPath xpath = DocumentHelper.createXPath("/Amazon:ItemLookupResponse/Amazon:Items/Amazon:Item/Amazon:ItemAttributes");
xpath.setNamespaceURIs(namespaceUris);
System.out.println("找到的节点数量:" + xpath.selectNodes(document).size());[/code]需要加入命名空间到 xpath 中。
这样就可以找到了。