我有一个显然包含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");
不会回馈任何后代。 我认为它与名称空间有关,但我不知道它是什么以及如何使用它。 我已经尝试在我的代码中声明命名空间,但这似乎也没有用。
任何人都可以帮我吗?
答案 0 :(得分:0)
您正在努力解决的所有元素都在默认命名空间中。这由xmlns="..."
属性表示。
使用此功能,您将获得一些结果:
XNamespace ns = "http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition"
var sources = xmlDoc.Descendants(ns + "DataSources");