用于 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.asmxListChildren 方法采用以下两种参数: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>  

另请参阅

XML 连接类型 (SSRS)
Reporting Services 教程 (SSRS)