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)
toXDocument.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