首先我确实看到了这一点但它似乎没有帮助 .NET中的XPath SelectNodes
我正在尝试阅读SSRS报告定义.
ReportingService report = new ReportingService();
report.Credentials = System.Net.CredentialCache.DefaultCredentials;
string x = new System.Text.UTF8Encoding().GetString(
report.GetReportDefinition(ReportName));
//Remove a Character at the beginning of the document -- Char 65279
x = x.Replace(x.Substring(0, 1), "");
XmlDocument xml = new XmlDocument();
XmlNamespaceManager ns = new XmlNamespaceManager(xml.NameTable);
// This appears to be a reserved default?
//ns.AddNamespace("xmlns","http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition");
ns.AddNamespace("xmlns:rd","http://schemas.microsoft.com/SQLServer/reporting/reportdesigner");
xml.LoadXml(x);
Run Code Online (Sandbox Code Playgroud)
现在我正在寻找应该在的Query节点
Report
...
DataSets
DataSet
Query
Run Code Online (Sandbox Code Playgroud)
现在,如果我看一些变量
xml.Name = "#document"
xml.DocumentElement.Name = "Report"
xml.DocumentElement.ChildNodes[12].Name = "DataSets"
xml.DocumentElement.ChildNodes[12].ChildNodes[0].Name = "DataSet"
xml.DocumentElement.ChildNodes[12].ChildNodes[0].ChildNodes[1].Name = "Query"
Run Code Online (Sandbox Code Playgroud)
但问题是尝试了一些我无法访问此DataSet节点或任何子节点的事情.例
xml.DocumentElement.SelectNodes(".//DataSets",ns);
xml.DocumentElement.SelectNodes("DataSets",ns);
xml.SelectSingleNode("//Report/DataSets",ns);
xml.SelectSingleNode("//Query",ns);
Run Code Online (Sandbox Code Playgroud)
两者都返回null我做错了什么.
使用driis建议编辑
谢谢你们带领我走正确的道路,这也有助于 使用xpath和rdlc报告
所以答案就是这样,你可以为任何你想要的前缀命名.取消注释掉线
ns.AddNamespace("xmlns","http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition");
Run Code Online (Sandbox Code Playgroud)
并将其更改为
ns.AddNamespace("def","http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition");
Run Code Online (Sandbox Code Playgroud)
然后以下工作
xml.SelectNodes("//def:DataSets",ns);
xml.SelectSingleNode("//def:Report/def:DataSets", ns);
xml.SelectSingleNode("//def:Query", ns);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4954 次 |
最近记录: |