如何使用或不使用xml命名空间来解析文档?

时间:2011-11-21 09:24:16

标签: linq-to-xml xml-namespaces

我有一些要解析的XML文件,其中一些是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<ab:rootNode xmlns:ab="http://www.uri.com">
    <ab:nodeDate>...</ab:nodeDate>
</ab:rootNode>

和其他人没有命名空间:

<?xml version="1.0" encoding="UTF-8"?>
<rootNode>
    <nodeDate>...</nodeDate>
</node>

在LINQ to XML中,我应该精确地命名空间,否则它不会使任何节点变细。 如何管理命名空间?我是否测试xmlns:ab="http://www.uri.com"元素中是否存在rootNode?如果它存在,我创建一个XNamespace并将其添加到这样的名称元素(伪代码):

XNamespace ab = "http://www.uri.com";
string prefixe = String.Empty;

if (XmlNamespaceExists(ab , "rootNode")
{
   prefixe = ab;
}

1 个答案:

答案 0 :(得分:2)

您可以使用:

XNamespace ns = doc.Root.Name.Namespace;
var dates = doc.Descendants(ns + "nodeDate");

我认为无论是否使用名称空间都应该有效 - 它最终会找到与根元素具有相同名称空间的每个nodeDate元素。