Синтаксис путей к элементам для данных XML-отчета (SSRS)

В конструкторе отчетов для определения данных из источника данных XML, которые должны использоваться в отчете, указывается путь к элементу с учетом регистра. Путь к элементу — это путь по иерархическим XML-узлам в источнике XML-данных и атрибуты этих узлов. Чтобы использовать путь к элементу по умолчанию, оставьте пустым запрос набора данных или XML ElementPath XML Query. При получении данных из источника XML-данных узлы элементов, которые имеют текстовые значения и атрибуты узла элемента, преобразуются в столбцы результирующего набора. При выполнении запроса значения этих узлов и атрибуты преобразуются в данные строк. Эти столбцы появляются как коллекция полей набора данных в области данных отчета. В этом разделе содержится информация о синтаксисе пути к элементу.

Примечание.

Синтаксис пути к элементу не зависит от пространства имен. Для указания пространств имен в пути к элементу используйте XML-запрос с XML-элементом ElementPath, описанным в статье Синтаксис запроса XML для XML-данных отчета (SSRS).

В следующей таблице указаны обозначения, используемые для определения пути к элементу.

Соглашение Используется для
полужирный Текст, который должен вводиться точно так, как показано.
| (вертикальная полоса) Разделяет элементы синтаксиса. Можно выбрать только один из элементов.
[ ] (скобки) Необязательные элементы синтаксиса. Не вводите скобки.
{ } (фигурные скобки) Разделяют параметры элементов синтаксиса.
[,...n] Указывает на то, что предшествующий элемент можно повторить n раз. Вхождения разделяются запятыми.

Синтаксис

  
Element path ::=  
    ElementNode[/Element path]  
ElementNode ::=  
    XMLName[(Encoding)][{[FieldList]}]  
XMLName ::=  
    [NamespacePrefix:]XMLLocalName  
Encoding ::=  
        HTMLEncoded | Base64Encoded  
FieldList ::=  
    Field[,FieldList]  
Field ::=  
    Attribute | Value | Element | ElementNode  
Attribute ::=  
        @XMLName[(Type)]  
Value ::=  
        @[(Type)]  
Element ::=  
    XMLName[(Type)]  
Type ::=  
        String | Integer | Boolean | Float | Decimal | Date | XML   
NamespacePrefix ::=  
    Identifier that specifies the namespace.  
XMLLocalName :: =  
    Identifier in the XML tag.   

Замечания

В следующей таблице указаны термины пути к элементу. Примеры в этой таблице ссылаются на учебный XML-документ Customers.xml в подразделе «Примеры» этого раздела.

Примечание.

В XML-тегах различается регистр символов. Определение ElementNode в пути к элементу должно точно соответствовать XML-тегам в источнике данных.

Термин Определение
Путь к элементу Определяет последовательность узлов, которые необходимо пройти в XML-документе, чтобы получить поля данных для набора данных из источника XML-данных.
ElementNode XML-узел в XML-документе. Узлы обозначаются тегами и находятся в иерархической связи с другими узлами. Например, <Customers> является корневым элементом узла. <Customer> является вложенным элементом узла <Customers>.
XMLName Имя узла. Например, именем узла Customers является Customers. Чтобы дать каждому узлу уникальное имя, XMLName может иметь префикс с идентификатором пространства имен.
Кодирование Указывает, что Value для этого элемента закодировано на языке XML, требует декодирования и включается как подэлемент этого элемента.
FieldList Определяет набор элементов и атрибутов, используемых для получения данных.

Если не указано иное, все атрибуты и подэлементы используются в качестве полей. Если указан список пустых полей ({}), поля из этого узла не используются.

FieldList не может одновременно содержать Value и Element или ElementNode.
Поле Определяет данные, извлекаемые как поле набора данных.
Attribute Пара "имя-значение" в ElementNode. Например, в узле элемента <Customer ID="1">, ID является атрибутом, а @ID(Integer) возвращает значение 1 с типом целочисленных данных (integer) из соответствующего поля данных ID.
Value Значение элемента. Value может использоваться только для последнего ElementNode в пути к элементу. Например, <Return> является конечным узлом. Если включить его в конце пути к элементу, Return {@} будет возвращать значение Chair.
Element Значение именованного подэлемента. Например, Customers {}/Customer {}/LastName извлекает значения только для элемента LastName.
Тип Необязательный тип данных, который должен использоваться для поля, созданного из этого элемента.
NamespacePrefix NamespacePrefix определяется в элементе XML-запроса. Если элемента XML-запроса не существует, пространства имен в XML ElementPath не обрабатываются. Если элемент XML-запроса существует, XML ElementPath имеет необязательный атрибут IgnoreNamespaces. Если IgnoreNamespaces имеет значение true, пространства имен в XML ElementPath и XML-документ не обрабатываются. Дополнительные сведения см. в разделе Синтаксис запроса XML для XML-данных отчета (SSRS).

Пример (без пространств имен)

В следующих примерах используется XML-документ Customers.XML. Эта таблица демонстрирует примеры синтаксиса путей к элементам и результаты их использования в запросе, который определяет набор данных, при использовании XML-документа в качестве источника данных.

Примечание.

Если путь к элементу пуст, запрос использует путь к элементу по умолчанию: первый путь к коллекции узлов-листьев. В первом примере пустой путь к элементу эквивалентен указанию пути /Customers/Customer/Orders/Order. Все значения узлов и атрибуты на этом пути возвращаются в результирующем наборе, а имена узлов и имена атрибутов представляются в качестве полей набора данных.

Пример 1: пустой

Заказ Кол-во идентификатор Имя Фамилия Идентификатор клиента xmlns
Стул 6 1 Bobby Moore 11 https://www.adventure-works.com
Таблица 1 2 Bobby Moore 11 https://www.adventure-works.com
Диван 2 8 Кристалл Hu 20 https://www.adventure-works.com
EndTables 2 15 Wyatt Diaz 33 https://www.adventure-works.com

Пример 2: Customers {}/Customer

Имя Фамилия идентификатор
Bobby Moore 11
Кристалл Hu 20
Wyatt Diaz 33

Пример 3: Customers {}/Customer {}/LastName

Фамилия
Moore
Hu
Diaz

Пример 4: Customers {}/Customer {}/Orders/Order {@,@Qty}

Заказ Кол-во
Стул 6
Таблица 1
Диван 2
EndTables 2

Пример 5: Customers {}/Customer/Orders/Order{ @ID(Integer)}

Заказ.ID Имя Фамилия идентификатор
1 Bobby Moore 11
2 Bobby Moore 11
8 Кристалл Hu 20
15 Wyatt Diaz 33

XML-документ: Customers.xml

Чтобы проверить примеры пути к элементу из предыдущего раздела, можно скопировать этот XML-документ и сохранить его в URL-адресе, доступном из конструктора отчетов, а затем использовать этот XML-документ в качестве источника XML-данных, например https://localhost/Customers.xml.

<?xml version="1.0"?>  
<Customers xmlns="http://www.adventure-works.com">  
   <Customer ID="11">  
      <FirstName>Bobby</FirstName>  
      <LastName>Moore</LastName>  
      <Orders>  
         <Order ID="1" Qty="6">Chair</Order>  
         <Order ID="2" Qty="1">Table</Order>  
      </Orders>  
      <Returns>  
         <Return ID="1" Qty="2">Chair</Return>  
      </Returns>  
   </Customer>  
   <Customer ID="20">  
      <FirstName>Crystal</FirstName>  
      <LastName>Hu</LastName>  
      <Orders>  
         <Order ID="8" Qty="2">Sofa</Order>  
      </Orders>  
      <Returns/>  
   </Customer>  
   <Customer ID="33">  
      <FirstName>Wyatt</FirstName>  
      <LastName>Diaz</LastName>  
      <Orders>  
         <Order ID="15" Qty="2">EndTables</Order>  
      </Orders>  
      <Returns/>  
   </Customer>  
</Customers>  

В качестве альтернативы можно создать источник XML-данных без строки соединения и внедрить документ Customers.XML в запрос с помощью следующей процедуры:

Чтобы встроить Customers.XML в запрос
  1. Создайте источник XML-данных с пустой строкой соединения.

  2. Создайте новый набор данных для источника XML-данных.

  3. В диалоговом окне Свойства набора данных нажмите кнопку Конструктор запросов. Откроется текстовое диалоговое окно конструктора запросов.

  4. На панели запросов введите следующие две строки:

    <Query>

    <XmlData>

  5. Скопируйте содержимое документа Customers.XML и вставьте его на панель запроса после <XmlData>.

  6. На панели запроса удалите первую строку, скопированную из документа Customers.XML: <?xml version="1.0"?>

  7. В конце запроса добавьте две следующие строки:

    </XmlData>

    </Query>

  8. Нажмите кнопку Выполнить запрос (!).

    Результирующий набор отображает 4 строки данных со следующими столбцами: xmlns, Customer.ID, FirstName, LastName, ID, Qty, Order.

  9. Нажмите ОК.