【问题标题】:Can't query SSRS XML input with a default namespace无法使用默认命名空间查询 SSRS XML 输入
【发布时间】:2012-07-20 00:22:14
【问题描述】:

我对 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 没有任何控制权,所以我只能使用默认命名空间。

【问题讨论】:

    标签: xml reporting-services namespaces reportbuilder


    【解决方案1】:

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

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

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

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

    希望有帮助!

    【讨论】:

    • 你太棒了!您不仅解决了我的问题,而且增加了我对 XML 的了解。既然您已经向我解释了,这完全有道理 - 非常感谢。
    猜你喜欢
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    相关资源
    最近更新 更多