我会尽力解释这个问题。我使用MicroSoftReportViewer加载我的报告。但在加载之前我想改变一些事情。到这里一切都好。我想使用xpath但是当我使用XMLDocument加载rdlc(xml)文件时,xpath表达式不起作用。唯一有效的xpath是“\”女巫得到了根。我用记事本打开文件,看到第一个xml节点使用这些模式
xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition"
xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"
我尝试使用添加了XMLSchema的XMLReader读取文件但仍然无法使用xpath。请非常感谢获得代码的和平,以了解如何加载文件,以便xpath正常工作。
最诚挚的问候, 约尔丹
答案 0 :(得分:5)
我担心我们需要确定你的XPath声明,但我的猜测是命名空间的问题。
未加前缀的元素位于default namespace
中,上述文档将其设置为
http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition
XPath查询现在需要在查询中包含这些命名空间。因此,selectSingleNode(/elementnameicanseeinnotepad
)不会给你任何东西。
要在查询中添加名称空间,您必须使用XmlNamespaceManager
类(或使用我不推荐的详细XPath语法)。
// get an instance
XmlNamespaceManager xMngr = new XmlNamespaceManager();
// associate the prefix ´def´ with the namespace-uri from the xml document we loaded
xMngr.AddNamespace( `def´, http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition);
// associate the prefix ´rd´ (same as used in document) with the namespace-uri from the xml document we loaded
xMngr.AddNamespace( `rd´, http://schemas.microsoft.com/SQLServer/reporting/reportdesigner);
// use the prefix(s) in the XPath query
xDoc.DocumentElement.SelectSingleNode(´/def:elementnameiseeinnotepad´, xMngr );
希望这有帮助。