用于 XML 报表数据的 XML 查询语法 (SSRS)
在 Reporting Services中,可以为 XML 数据源创建数据集。 定义数据源后,可以为数据集创建查询。 根据数据源所指向的 XML 数据类型,可以通过包括 XML Query 或元素路径来创建数据集查询。 XML 查询以 <Query> 标记开头,并且包括因数据源而异的命名空间和 XML 元素。 元素路径与命名空间无关,它使用与 XPath 类似的语法指定要使用的来自基础 XML 数据的节点和节点属性。 有关元素路径的详细信息,请参阅用于 XML 报表数据的元素路径语法 (SSRS)。
可以为以下类型的 XML 数据创建 XML 数据源:
URL 使用 http 协议指向的 Xml 文档
返回 XML 数据的 Web 服务端点
嵌入的 XML 数据
指定 XML Query 或元素路径的方式取决于 XML 数据的类型。
对于 XML 文档,XML Query 是可选的。 如果包括它,则它可以包含可选的 XML ElementPath。 XML ElementPath 的值使用元素路径语法。 您可以包含 XML Query 和 XML ElementPath ,以便当数据源中的 XML 数据需要命名空间时能正确处理该命名空间。
对于连接字符串 URL 指向的 Web 服务端点,XML Query 定义 Web 服务方法和/或 SOAP 操作。 XML 数据提供程序将创建 Web 服务请求,以检索要用于报表的 XML 数据。
注意
当 Web 服务命名空间包含正斜杠 ( / ) 字符时,应同时包含 Web 服务方法和 SOAP 操作,以使 XML 数据处理扩展插件可以正确派生命名空间。
对于嵌入的 XML 文档,XML Query 定义要使用的嵌入 XML 数据、包括可选命名空间并包含可选的 XML ElementPath。
指定 XML 数据的查询参数
可以为 XML 文档指定查询参数。
对于 URL 请求,查询参数以标准 URL 参数的形式包含在查询中。
对于 Web 服务请求,需要将查询参数传递给 Web 服务方法。 若要定义查询参数,请使用 “数据集属性” 对话框的 “参数” 页。
示例
下表中的示例说明如何从报表服务器 Web 服务、XML 文档和嵌入的 XML 数据中检索数据。
XML 数据源 | 查询示例 |
---|---|
使用 ListChildren 方法获得的 Web 服务 XML 数据。 | <Query> <Method Name="ListChildren" Namespace="https://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices" /> </Query> |
使用 SoapAction 获得的 Web 服务 XML 数据。 | <Query xmlns=namespace> <SoapAction>https://schemas/microsoft.com/sqlserver/2005/03/23/reporting/reportingservices/ListChildren</SoapAction> </Query> |
使用命名空间的 XML 文档或嵌入的 XML 数据。 为元素路径指定命名空间的查询元素。 |
<Query xmlns:es="https://schemas.microsoft.com/StandardSchemas/ExtendedSales"> <ElementPath>/Customers/Customer/Orders/Order/es:LineItems/es:LineItem</ElementPath> </Query> |
嵌入的 XML 文档。 | <Query> <XmlData> <Customers> <Customer ID="1">Bobby</Customer> </Customers> </XmlData> <ElementPath>Customer {@}</ElementPath> </Query> |
使用默认值的 XML 文档。 |
No query。 元素路径是从 XML 文档本身派生而来的,并且与命名空间无关。 |
注意
第一个 Web 服务示例列出了使用 ListChildren 方法获得的 Web 服务 XML 数据。 若要运行此查询,必须创建新的数据源并将连接字符串设置为 https://localhost/reportserver/reportservice2006.asmx
。
ListChildren 方法采用以下两种参数:Item 和 Recursive 。 将 项 的默认值设置为 / ,将 递归 的默认值设置为 1。
指定命名空间
使用 XML Query 元素可以指定在数据源的 XML 数据中使用的命名空间。 下面的 XML 查询使用命名空间 sales。
和 的 XML sales:LineItems
ElementPath sales:LineItem
节点使用命名空间 sales。
<Query xmlns:sales=
"https://schemas.microsoft.com/StandardSchemas/ExtendedSales">
<SoapAction>
https://schemas.microsoft.com/SalesWebService/ListOrders
</SoapAction>
<ElementPath>
Customers/Customer/Orders/Order/sales:LineItems/sales:LineItem
</ElementPath>
</Query>
若要指定数据提供程序命名空间以使默认的命名空间保持为空,请使用 xmldp。 这在下面的示例中显示。
示例
以下示例使用 XML 文档 DPNamespace.xml,该表之后提供了该文档以进行说明。 此表显示了包括命名空间前缀的 XML ElementPath 语法的两个示例。
XML 查询元素 | 数据集中的结果字段 |
---|---|
<Query/> | 值 A:https://schemas.microsoft.com/... 值 B: https://schemas.microsoft.com/... 值 C: https://schemas.microsoft.com/... |
<xmldp:Query xmlns:xmldp="https://schemas.microsoft.com/sqlserver/2005/02/reporting/XmlDPQuery" xmlns:ns="https://schemas.microsoft.com/..."> <xmldp:ElementPath>Root {}/ns:Element2/Node</xmldp:ElementPath> </xmldp:Query> |
值 D 值 E 值 F |
XML 文档:DPNamespace.xml
可以复制此 XML 并将其保存到报表设计器可访问的 URL 以用作 XML 数据源:例如 https://localhost/DPNamespace.xml.
<Root xmlns:ns="https://schemas.microsoft.com/...">
<ns:Element1>
<Node>Value A</Node>
<Node>Value B</Node>
<Node>Value C</Node>
</ns:Element1>
<ns:Element2>
<Node>Value D</Node>
<Node>Value E</Node>
<Node>Value F</Node>
</ns:Element2>
</Root>