我在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没有任何控制权,所以我坚持使用默认命名空间。
答案 0 :(得分:3)
在前两个实例中,person元素实际上是默认命名空间的一部分(请注意,在第二个实例中,前缀(p)绑定到'http:// somenamespace'命名空间,但前缀不是分配给人(如在p:person))。
在最后一个实例中,person元素实际上绑定到了命名空间,因此完全限定的元素是{http:// somenamespace} person。
然后,相应的查询表达式需要命名空间来解析完全限定的元素,如:
<Query xmlns:p="http://somenamespace">
...
<ElementPath>/p:person</ElementPath>
</Query>
希望有所帮助!