【发布时间】:2013-06-09 16:11:11
【问题描述】:
我正在加载此 KML:http://www.mcallen.net/Files/docs/traffic/bike/kml/McBikeRoutes.kml
到一个 XDocument 中,如果我在调试器中查看 XDocument,它似乎正确地填充了文件的内容。
但是,当我尝试访问任何后代时,无论我做什么,它都是空的。
var xDoc = XDocument.Load("Assets/McBikeRoutes.kml");
var d = xDoc.Descendants(); // <-- Empty result
在上面的代码中,McBikeRoutes.kml 是上面链接文件的精确副本,我只是手动将它添加到我的项目中,因此它是在内部而不是在线获取它。
另外,我可以验证 xDoc 确实加载了文件,就像我在调试器中观察它一样,我可以看到它包含完整的 KML 文档内容。
但是,无论我如何尝试访问后代,结果始终为空。
我尝试在文档中包含默认命名空间和所有其他命名空间,但无论我做什么都没有结果。
我终于尝试了 xDoc.Descendants() 来获取所有内容,结果也为空!
我尝试了 xDoc.Root.Descendants() 和 xDoc.Document.Descendants(),以及 xDoc.Elements()、xDoc.Root.Elements() 和 xDoc.Document.Elements() 并且 EVERTHING 返回一个空结果,即使 XDocument 中有明确的信息。
奇怪的是,如果我这样做了:
((XElement)xDoc.FirstNode)
我确实得到了第一个后代 XElement!但如果我这样做:
((XElement)xDoc.FirstNode).Descendants()
我仍然没有得到任何结果(当我尝试 Elements() 时也是如此)!
有人知道我在这里做错了什么吗?是因为文档是 KML 吗?
【问题讨论】:
-
不确定是否重要,但 XDocument 的 DocumentType 也为空。
-
事实证明 xDoc.Nodes() 也是空的,即使 xDoc.FirstNode 返回文档中第一个节点的 XNode ...... gah wtf!
-
((XElement)xDoc.FirstNode没有平衡括号。发布您的代码以获取最小的失败示例并指示值(例如通过打印)可能很有用。可能是您错误地投射元素 -
抱歉,这只是我帖子中的错字,而不是原始代码,已在上面修复。没有太多要发布的代码,我确实做了 XDocument.Load 然后 xDoc.Descendants() 是空的
-
((XElement)xDoc.FirstNode) 返回什么?我希望有“kml”元素,但距离我使用 LINQ 已经有一段时间了。
标签: xml linq-to-xml kml