使用xpath和rdlc报告

时间:2010-01-20 07:37:22

标签: c# xml rdlc

我会尽力解释这个问题。我使用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正常工作。

最诚挚的问候, 约尔丹

1 个答案:

答案 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 );

希望这有帮助。