无法使用命名空间读取 xml

本文关键字:读取 xml 命名空间 | 更新日期: 2023-09-27 18:30:33

当根目录中没有命名空间时,我可以使用 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

谁能指出我们哪里出了问题:)

谢谢

无法使用命名空间读取 xml

Level2

RootLevel1 元素位于同一命名空间中(后代元素继承使用 xmlns 属性定义的命名空间,直到重新定义命名空间),因此您需要在这两种情况下都使用 ns +,即:

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

您可以获取根的默认命名空间,如下所示:

var ns = doc.Root.GetDefaultNamespace();