Dom4j xpath 不能找到内容

有时候我们用 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 中。

这样就可以找到了。