无法使用默认命名空间查询SSRS XML输入

时间:2012-07-20 00:22:14

标签: xml reporting-services namespaces reportbuilder

我在SSRS(SQL Server 2008 R2)中遇到了报告问题。无论输入是从报表生成器(v3)还是通过SSRS的Web服务接口提供,都会出现问题。

让我们说这是输入XML(在名为“ProvideData”的参数中):

<person>
<name>joe</name>
</person>

...我用查询创建了一个数据集:

<Query><XmlData>" & Parameters!ProvidedData.Value & "</XmlData>
<ElementPath>person</ElementPath></Query>

然后我用字段源“name”创建一个名为“Name”的字段。没问题 - 这可以在报告中使用而没有任何问题。

如果我更改输入XML以给它一些命名空间信息,它也可以不进行任何更改。所以现在XML是:

<person xmlns:p="http://somenamespace">
<name>joe</name>
</person>

这也有效 - 再次,其他任何地方都没有变化。在报表生成器中或通过Web服务接口从C#传入时,作为默认值使用。

问题是我正在使用默认命名空间提供XML,当我使用该XML时,字段查询无法解析。没有错误,它只是找不到值。

因此,如果XML如下所示,则不起作用:

<person xmlns="http://somenamespace">
<name>joe</name>
</person>

有什么想法吗?我对传入的XML没有任何控制权,所以我坚持使用默认命名空间。

1 个答案:

答案 0 :(得分:3)

在前两个实例中,person元素实际上是默认命名空间的一部分(请注意,在第二个实例中,前缀(p)绑定到'http:// somenamespace'命名空间,但前缀不是分配给人(如在p:person))。

在最后一个实例中,person元素实际上绑定到了命名空间,因此完全限定的元素是{http:// somenamespace} person。

然后,相应的查询表达式需要命名空间来解析完全限定的元素,如:

<Query xmlns:p="http://somenamespace">
 ...
<ElementPath>/p:person</ElementPath>
</Query>

希望有所帮助!