使用 linq to xml 解析 xml 时遇到问题

发布于 2024-12-14 06:28:23 字数 652 浏览 2 评论 0原文

我在解析从 Web 服务收到的 xml 时遇到问题。

xml 看起来非常简单:

<Result xsi:schemaLocation="urn:yahoo:developer http://developer.yahooapis.com/TimeService/V1/GetTimeResponse.xsd" type="web"><Timestamp>1320677359</Timestamp></Result>

但是当我尝试使用以下代码解析它时,我没有得到任何返回结果。

 XDocument doc = XDocument.Load("http://developer.yahooapis.com/TimeService/V1/getTime?appid=StackSolution");           

            var datestamp = from ds in doc.Descendants("Result")
                            select new { currentstamp = ds.Element("Timestamp").Value };

有没有解决方案或方法来解析它?

预先感谢您

I am having a problem parsing xml that I receive from Web Service.

The xml looks very simple:

<Result xsi:schemaLocation="urn:yahoo:developer http://developer.yahooapis.com/TimeService/V1/GetTimeResponse.xsd" type="web"><Timestamp>1320677359</Timestamp></Result>

But when I try to parse it with following code I am getting no return results.

 XDocument doc = XDocument.Load("http://developer.yahooapis.com/TimeService/V1/getTime?appid=StackSolution");           

            var datestamp = from ds in doc.Descendants("Result")
                            select new { currentstamp = ds.Element("Timestamp").Value };

Is there a solution or way to parse it?

Thanks you in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

暗恋未遂 2024-12-21 06:28:23

您有几个问题:首先,结果节点不是后代节点。这是根。其次,您在使用 LINQ to XML 时遇到了最常见的问题 - 您忘记了命名空间。以下内容应该可以满足您的需要:

XElement doc = XElement.Load("http://developer.yahooapis.com/TimeService/V1/getTime?appid=StackSolution");            
XNamespace ns = "urn:yahoo:developer";
var datestamp = from ds in doc.DescendantsAndSelf(ns + "Result") 
                select new { currentstamp = ds.Element(ns + "Timestamp").Value };

注意,这会生成一个 IEnumerable。如果您只需要日期戳,请考虑使用 FirstOrDefault。您只需执行以下操作即可使此过程变得更简单:

XElement doc = XElement.Load("http://developer.yahooapis.com/TimeService/V1/getTime?appid=StackSolution");            
XNamespace ns = "urn:yahoo:developer";
var datestamp = doc.Element(ns + "Timestamp").Value;

You have a couple issues: First, the Result node isn't a descendant. It's the root. Second, you ran into the most common issue when using LINQ to XML - you forgot the namespace. The following should give you what you need:

XElement doc = XElement.Load("http://developer.yahooapis.com/TimeService/V1/getTime?appid=StackSolution");            
XNamespace ns = "urn:yahoo:developer";
var datestamp = from ds in doc.DescendantsAndSelf(ns + "Result") 
                select new { currentstamp = ds.Element(ns + "Timestamp").Value };

Note, this produces an IEnumerable. If you only want the datestamp, consider using FirstOrDefault instead. You may be able to make this simpler by just doing the following:

XElement doc = XElement.Load("http://developer.yahooapis.com/TimeService/V1/getTime?appid=StackSolution");            
XNamespace ns = "urn:yahoo:developer";
var datestamp = doc.Element(ns + "Timestamp").Value;
遗失的美好 2024-12-21 06:28:23

此方法使用 LocalName(非限定标识符)。

var datestamp = doc.Root.Descendants().Where(c => c.Name.LocalName.Equals("Timestamp")).FirstOrDefault().FirstNode.ToString()

This method avoids the namespace issue using LocalName (unqualified identifier).

var datestamp = doc.Root.Descendants().Where(c => c.Name.LocalName.Equals("Timestamp")).FirstOrDefault().FirstNode.ToString()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文