0

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

我正在尝试使用 linq to 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 root”的结果,其余的总是空的,我不明白我做错了什么。

    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");
4

2 回答 2

2

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

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

例如:

 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");
   ...

}
于 2013-01-31T09:05:07.367 回答
1
        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;
于 2013-01-31T08:28:45.480 回答