我正在使用亚马逊广告API,它返回XML,如下所示:http://xopusfiddle.net/27NxH/
我希望获得亚马逊提供的商品的价值。理论上,以下内容应返回名称为Amount
且值为9980
string uri = "redacted" + isbn;
string signedUri = helper.Sign(uri);
WebRequest request = HttpWebRequest.Create(signedUri);
WebResponse response = request.GetResponse();
XmlDocument xDoc = new XmlDocument();
xDoc.Load(response.GetResponseStream());
var testvar = xDoc.SelectSingleNode("/ItemLookupResponse/Items/Item/ItemAttributes/ListPrice");
但是,testvar
会返回null
。当我尝试返回XmlNodeList
时也会出现同样的情况。
我已经检查过确实加载了一个XML文档(有),我注意到以下内容将返回值为Amount
的正确节点(9980
):
XmlNode aznPriceNode = xDoc.DocumentElement.ChildNodes.Item(1).ChildNodes.Item(1).ChildNodes.Item(8).ChildNodes.Item(10).ChildNodes.Item(0);
然而,硬编码这样的路径是一个糟糕的想法,并不总是有效,因为XML文档可能并不总是包含ListPrice
条目。
为什么XPath不适用于此实例?
答案 0 :(得分:1)
需要添加命名空间。
const string xpath = "/x:ItemLookupResponse/x:Items/x:Item/x:ItemAttributes/x:ListPrice";
XmlDocument xDoc = new XmlDocument();
XmlNamespaceManager ns = new XmlNamespaceManager(new NameTable());
xDoc.Load(response.GetResponseStream());
ns.AddNamespace("x", xDoc.DocumentElement.NamespaceURI);
var testvar = xDoc.SelectSingleNode(xpath, ns);