gpt4 book ai didi

c# - 带有报告服务命名空间枚举的 XML 没有产生任何结果

转载 作者:行者123 更新时间:2023-12-04 16:57:30 24 4
gpt4 key购买 nike

我有一个 .rdl 文件,它显然包含用于生成报告的 XML。
我想通过这个 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

现在我想要所有数据源并使用以下代码:
 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");

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

任何人都可以帮助我吗?

最佳答案

您遇到的所有元素都在默认命名空间中。这由 xmlns="..." 表示属性。

使用这个,你会得到一些结果:

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

关于c# - 带有报告服务命名空间枚举的 XML 没有产生任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40339718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com