迭代特定于亚马逊的XDocument

时间:2017-10-04 15:40:11

标签: c# xml amazon-web-services xpath

我正在使用亚马逊广告API,它返回XML,如下所示:http://xopusfiddle.net/27NxH/

我希望获得亚马逊提供的商品的价值。理论上,以下内容应返回名称为Amount且值为9980

的XML节点
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不适用于此实例?

1 个答案:

答案 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);