带有报告服务名称空间枚举的XML没有产生结果

时间:2016-10-31 09:45:20

标签: c# xml linq reporting-services namespaces

我有一个显然包含XML的.rdl文件来生成报告。 我想搜索这个XML,在报告中查找不同的信息。 XML以这样的方式开始:

<?xml version="1.0" encoding="utf-8"?>
<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns:cl="http://schemas.microsoft.com/sqlserver/reporting/2010/01/componentdefinition" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition">
  <Author>© Piet</Author>
  <AutoRefresh>0</AutoRefresh>
  <DataSources>
    <DataSource Name="DW_Tables">
      <DataSourceReference>DW_Tables</DataSourceReference>
      <rd:SecurityType>None</rd:SecurityType>
      <rd:DataSourceID>84cf022a-c58e-4286-8bc8-bca2c0358206</rd:DataSourceID>
    </DataSource>
  </DataSources>
.... etc

现在我想要所有的DataSource并使用这段代码:

 var xmlnodes = xmlDoc.Root.Descendants("DataSources")
                var result = from c in xmlnodes
                             select new
                             {
                                 datasource = (string)c.Element("DataSource").Value
                             };

此代码在许多具有不同命名空间的XML文件中对我有用 例如:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ToolsVersion="2.0">
  <DataSources>
    <ProjectItem>
      <Name>DW_Tables.rds</Name>
      <FullPath>DW_Tables.rds</FullPath>
    </ProjectItem>
    <ProjectItem> 

但对于带有reportingservices名称空间的rdl,它似乎没有任何作用。 每当我尝试查看后代时,我都会收到消息:空“枚举没有结果”字符串 “

我尝试过很多东西但是甚至

var descendants = xmlReportDoc.Root.Descendants("Reports");

不会回馈任何后代。 我认为它与名称空间有关,但我不知道它是什么以及如何使用它。 我已经尝试在我的代码中声明命名空间,但这似乎也没有用。

任何人都可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您正在努力解决的所有元素都在默认命名空间中。这由xmlns="..."属性表示。

使用此功能,您将获得一些结果:

XNamespace ns = "http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition"
var sources = xmlDoc.Descendants(ns + "DataSources");