无法使用命名空间读取xml

时间:2013-09-08 21:16:30

标签: c# xml linq

当根目录中没有命名空间但在存在时没有检索任何名称空间时,我可以使用LINQ读取XML文档。

该代码用于逐步完成文档:

foreach (XElement element in doc.Descendants("Level1").Elements("Level2"))

我也尝试获取命名空间

var ns = doc.Root.Name.Namespace
foreach (XElement element in doc.Descendants(ns + "Level1").Elements("Level2"))

该文件列为

<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns="xmlns://www.example.com/schema/root" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.11" xsi:type="FVDL">
<Level1>
<Level2>
etc

任何人都可以指出我出错的地方:)

由于

2 个答案:

答案 0 :(得分:4)

Level2RootLevel1元素位于同一名称空间中(后代元素继承使用xmlns属性定义的名称空间,直到重新定义名称空间为止)你需要在两种情况下使用ns +,即:

doc.Descendants(ns + "Level1").Elements(ns + "Level2"))

答案 1 :(得分:0)

您可以按如下方式获取root的默认命名空间:

var ns = doc.Root.GetDefaultNamespace();