2011-01-07 37 views
0

我没有问题使用linq to xml来查询xml,但是我有这个特殊的xml文件,其第一个节点以声明开头。如果没有declation(例如:xmlns:dm0 =“http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core”) 我只是使用decandents来开始查询数据。我的问题是,如何查询XML例如:下面的格式获得“forbiddenNamespaceDependencies”的价值:查询XML,其第一个节点以某种声明开头

<?xml version="1.0" encoding="utf-8"?> 

<layerModel xmlns:dm0="http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core"> 


<layers> 
<layer Id="6c1b89f1-9204-4914-a721" name="Layer1" forbiddenNamespaceDependencies="NameSpace1"> 
    <references>... 

回答

0

我看不出有什么问题。我把你的片段,并添加结束标记来获得这样看一个良好的XML文档:

<?xml version="1.0" encoding="utf-8"?> 

<layerModel xmlns:dm0="http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core"> 


    <layers> 
    <layer Id="6c1b89f1-9204-4914-a721" name="Layer1" forbiddenNamespaceDependencies="NameSpace1"> 
     <references> 
     ... 
     </references>> 
    </layer> 
    </layers> 
</layerModel> 

然后下面的C#代码

XDocument doc = XDocument.Load(@"..\..\XMLFile1.xml"); 
    Console.WriteLine(doc.Root.Element("layers").Element("layer").Attribute("forbiddenNamespaceDependencies").Value); 

输出“forbiddenNamespaceDependencies”属性就好的价值,根元素上的名称空间声明并不重要,因为您的示例中没有元素或属性在该名称空间中。

如果您仍有问题,请考虑发布足够的细节,以便我们重现问题。

+0

谢谢。我在做doc.descendants,只有在格式如下所示的情况下才有效: ...没有任何根目录属性。您的解决方案doc.root的作品 – user282807 2011-01-08 17:30:52