Sequence不包含任何元素 - PayPal SOAP Response

时间:2014-09-16 05:43:56

标签: xml-parsing linq-to-xml

我正在尝试从XML元素中读取值,但我总是得到"序列包含元素"错误。 我已经完成了我的研究,但对我的问题没有任何作用。

我想阅读此XML

中的Ack和Timestamp元素值
<DoDirectPaymentResponse xmlns="urn:ebay:api:PayPalAPI">
    <Timestamp xmlns="urn:ebay:apis:eBLBaseComponents">2014-09-16T04:41:56Z</Timestamp>
    <Ack xmlns="urn:ebay:apis:eBLBaseComponents">Success</Ack>
</DoDirectPaymentResponse>

这是我读取Ack和Timestamp值的代码

String xmlString = @xml;

using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
{
       XDocument xdoc = XDocument.Load(reader);

       var timestamp = xdoc.Descendants("Timestamp").Single();
       receipt.Timestamp = timestamp.Value;

       var response = xdoc.Descendants("Ack").Single();
        receipt.Response = response.Value;
}

请帮我解决这个问题。非常感谢。

1 个答案:

答案 0 :(得分:1)

您需要使用正确的XNamespace来访问命名空间中的元素:

XDocument xdoc = XDocument.Parse(xmlString);
XNamespace ns = "urn:ebay:apis:eBLBaseComponents";

var timestamp = xdoc.Descendants(ns+"Timestamp").Single();
receipt.Timestamp = timestamp.Value;

var response = xdoc.Descendants(ns+"Ack").Single();
receipt.Response = response.Value;

附注:您可以使用XDocument.Parse()从XML字符串内容加载XML。