LINQ to XML – 使用前缀访问后代

我有一个像这样的示例xml文件

 Name address Zip  

所有节点都有一个前缀值作为vs,谁能告诉我如何解析这个文件来读取名称和地址信息? 我是LINQ的新手。 任何有关这方面的帮助将不胜感激。

谢谢!

您需要知道命名空间是什么。 这将在早些时候宣布,例如:

 xmlns:vs="http://some_url_here" 

您可以使用XNamespace进行查询:

 XNamespace vs = "http://some_url_here"; var names = doc.Descendants(vs + "Name") .Select(x => (string) x) .ToList(); 

这里的+实际上是将XNamespace和一个字符串转换为XName

前缀“vs”应映射到XML文档头中的命名空间,例如:

  

然后,您可以使用XNamespace通过LINQ选择这些元素,如下所示:

 XNamespace vs = "http://schemas.example.com/vs"; var names = myXDoc.Root.Descendants(vs + "Name"); 

XNamespace和XName类型都支持从字符串进行隐式转换。

我知道这篇文章很老,但想提供一些额外的信息。 在寻求更复杂的xml文件的帮助时,我被引导到这个问题和答案。 我的xml有几个名称空间,并且也有嵌套的命名空间。 我能够通过此链接中的建议解决我的问题

这是很好的帮助,并希望在此处发布,以防其他人遇到同样的问题