为什么我无法读取 XML

本文关键字:读取 XML 为什么 | 更新日期: 2023-09-27 17:56:51

可能的重复项:
为什么XDocument不能从这个格式良好的XML文本中获取元素?

我正在尝试使用 linq 到 xml 读取 xml,我想我理解错了。这是xml的开始(它很长,所以我不会全部发布)

<?xml version="1.0" encoding="utf-8"?>
   <Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
      <Body>
         <ReportItems>
             <Tablix Name="Tablix12">
              ......
              ......
             </Tablix>

这个 xml 可能有一些"Tablix"元素,并且可能有 1 个或没有,对于其中的每一个,我想阅读这个标签中的内容,但我很难开始。

我已经尝试了几种方法来获取"Tablix"元素或任何其他元素。在此代码中,我只得到"var 根"的结果,其余的总是 null,我不明白我做错了什么。

    public ReadTablixResponse ReadTablixAdvanced(string rdl)
    {
        XDocument xml = XDocument.Parse(rdl);
        var root = xml.Root;
        var Body = xml.Root.Element("Body");
        var report = xml.Root.Element("Report");
        var aa = xml.Element("Report");
        var bb = xml.Element("Body");
        var test = xml.Elements("Tablix");

为什么我无法读取 XML

我注意到的一件事是,您使用了方法Element("name"). 它将始终尝试使用指定的 XName 重新运行第一个(按文档顺序)直接子元素。 这就是你得到的原因。

如果你想返回更深的元素(从你寻找的地方)。 您需要使用 Descendants("name") 方法,该方法将返回所有 Descendants 元素的集合。 无论它们有多深(相对于您选择的锚点)......

例如:

 XNamespace xNameSpace = "http://schemas.micro.....";
 // ...
 var tablixes= xml.Descendants(xNameSpace + "Tablix");

然后你可以通过:

foreach (var tablix in tablixes)
{
    var name=(string)tablix.Attribute("Name");
    var age=(int)tablix.Element("age");
   ...
}
        XDocument xDocument = XDocument.Parse(rdl);
        XNamespace xNameSpace = "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition";
        var tablixes= from o in xDocument.Descendants(xNameSpace + "Tablix")
                    select o.Value;