起初,我确实看到了这一点,但它似乎对XPath SelectNodes in .NET没有帮助
我正在尝试阅读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);现在我正在查找查询节点,该节点应该在
Report
...
DataSets
DataSet
Query现在如果我看一些变量
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"但是问题是尝试了一些我不能到达这个DataSets节点或任何子节点的东西。示例
xml.DocumentElement.SelectNodes(".//DataSets",ns);
xml.DocumentElement.SelectNodes("DataSets",ns);
xml.SelectSingleNode("//Report/DataSets",ns);
xml.SelectSingleNode("//Query",ns);两者都返回null,我做错了什么?
使用driis建议进行编辑
发布于 2011-02-11 04:15:44
感谢你们带领我走上了正确的道路,这也帮助了Using xpath and rdlc report
所以答案是这样的,你可以给你的前缀命名任何你想要的。取消对该行的注释
ns.AddNamespace("xmlns","http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition");并将其更改为
ns.AddNamespace("def","http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition");然后,下面的工作就可以了
xml.SelectNodes("//def:DataSets",ns);
xml.SelectSingleNode("//def:Report/def:DataSets", ns);
xml.SelectSingleNode("//def:Query", ns);发布于 2011-02-11 03:49:47
这将返回xml XmlDocument中的所有DataSets节点:
xml.SelectNodes("//DataSets");注意,这将返回一个XmlNodeList类型,您可以在该类型上进行迭代。
如果您确定问题与名称空间有关,请查看http://support.microsoft.com/kb/318545
发布于 2011-02-11 03:49:51
那你为什么不干脆
XmlNodeList queries = xml.SelectNodes("//Query");
//selects 'Query' node occuring anywhere
foreach(XmlNode query in queries){
XmlNode dataSetForquery = query.GetParent();
//do some other stuff with query here
}https://stackoverflow.com/questions/4961805
复制相似问题