2

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

假设这是输入 XML(在名为“ProvidedData”的参数中):

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

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

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

然后我使用字段源“名称”创建一个名为“名称”的字段。没问题 - 这可以毫无问题地用于报告。

如果我更改输入 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 没有任何控制权,所以我坚持使用默认命名空间。

4

1 回答 1

3

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

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

然后,适当的查询表达式需要命名空间来解析完全限定的元素,如下所示:

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

希望有帮助!

于 2012-07-20T04:43:33.397 回答