C# 尝试从xml字符串中获取xml节点值时,序列不包含任何元素

C# 尝试从xml字符串中获取xml节点值时,序列不包含任何元素,c#,xml-parsing,C#,Xml Parsing,请阅读下面的代码。在这里,我试图获取节点下的所有元素,然后我的目标是获取TotalNumberOfPages值(如XML中所示,当前为9) 但我的问题是我遇到了一个错误: System.InvalidOperationException:“序列不包含元素” 为了更好地理解错误,附上了错误截图。你能告诉我我试图抓住所有元素的方式出了什么问题吗?如果可能的话,您能告诉我如何从TotalNumberOfPage中获取9吗 提前谢谢 C#: XML: 2018-06-20T17:26:29.518Z

请阅读下面的代码。在这里,我试图获取
节点下的所有元素,然后我的目标是获取
TotalNumberOfPages
值(如XML中所示,当前为9)

但我的问题是我遇到了一个错误:

System.InvalidOperationException:“序列不包含元素”

为了更好地理解错误,附上了错误截图。你能告诉我我试图抓住所有元素的方式出了什么问题吗?如果可能的话,您能告诉我如何从
TotalNumberOfPage
中获取9吗

提前谢谢

C#:

XML:


2018-06-20T17:26:29.518Z

编辑:您的错误是使用了
XElement
:它正在
的子元素中搜索匹配的元素;这就是为什么你没有得到任何结果。更改
XElement.Parse(xml)
to
XDocument.Parse(xml),则以下代码段将起作用

您只需检查本地名称:

var AllElements = parsedXML.Descendants().First(x => x.Name.LocalName == "GetSellerListResponse");
我建议对
parsedXML
使用
XDocument
而不是
XElement
,因为您可以将上述查询缩短为
var-allegements=parsedXML.Root

您可以尝试的另一件事是在名称空间前面加上前缀:

XNamespace ns = "urn:ebay:apis:eBLBaseComponents";
var AllElements = parsedXML.Descendants(ns + "GetSellerListResponse").First();
回答“如何获取页数”问题:


我建议使用
System.Xml
中的
XmlDocument

请尝试以下代码:

XmlDocument doc = new XmlDocument();
doc.LoadXml("<GetSellerListResponse xmlns=\"urn:ebay:apis:eBLBaseComponents\"><Timestamp>2018-06-20T17: 26:29.518Z</Timestamp><Ack>Success</Ack><Version>1059</Version><Build>E1059_CORE_APISELLING_18694654_R1</Build><PaginationResult><TotalNumberOfPages>9</TotalNumberOfPages></PaginationResult></GetSellerListResponse>");
XmlNodeList nodeList = doc.GetElementsByTagName("TotalNumberOfPages");

您需要包括名称空间。是否在其上实现名称空间?否;您应该使用XElement,它有一个简单得多的API。XElement文档与.NET 3及更低版本兼容。使用哪一个是程序员的选择。我在不同的项目中使用过XmlDocument和XDocument,并在这两方面都取得了成功。这个答案应该可以解决原来的问题。在使用XDocument.Parse(xml)之后,它运行得很好,但是我如何才能获取TotalNumberOfPages呢?
XNamespace ns = "urn:ebay:apis:eBLBaseComponents";
var AllElements = parsedXML.Descendants(ns + "GetSellerListResponse").First();
var pages = AllElements.Element(ns + "PaginationResult").Element(ns + "TotalNumberOfPages").Value;
XmlDocument doc = new XmlDocument();
doc.LoadXml("<GetSellerListResponse xmlns=\"urn:ebay:apis:eBLBaseComponents\"><Timestamp>2018-06-20T17: 26:29.518Z</Timestamp><Ack>Success</Ack><Version>1059</Version><Build>E1059_CORE_APISELLING_18694654_R1</Build><PaginationResult><TotalNumberOfPages>9</TotalNumberOfPages></PaginationResult></GetSellerListResponse>");
XmlNodeList nodeList = doc.GetElementsByTagName("TotalNumberOfPages");
nodeList.FirstOrDefault().InnerText