Синтаксис пути к элементу для определения XML-данных отчета (службы SSRS)
В конструкторе отчетов для определения данных из источника XML-данных, которые должны использоваться в отчете, указывается путь к элементу с учетом регистра. Путь к элементу — это путь по иерархическим XML-узлам в источнике XML-данных и атрибуты этих узлов. Чтобы использовать путь к элементу по умолчанию, оставьте пустым запрос набора данных или XML ElementPath для XML-Query. При получении данных из источника XML-данных узлы элементов, которые имеют текстовые значения и атрибуты узла элемента, преобразуются в столбцы результирующего набора. При выполнении запроса значения этих узлов и атрибуты преобразуются в данные строк. Эти столбцы появляются в качестве коллекции полей набора данных в панели «Данные отчета». В этом разделе содержится информация о синтаксисе пути к элементу.
Примечание |
---|
Синтаксис пути к элементу не зависит от пространства имен. Для указания пространств имен в пути к элементу используйте XML-запрос с XML-элементом ElementPath, описанным в разделе Синтаксис элемента XML Query для задания 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 может иметь префикс с идентификатором пространства имен. |
Encoding |
Указывает, что Value для этого элемента закодировано на языке XML, требует декодирования и включается как подэлемент этого элемента. |
FieldList |
Определяет набор элементов и атрибутов, используемых для получения данных. Если не указано иное, все атрибуты и подэлементы используются в качестве полей. Если указан пустой список полей ({}), то поля из этого узла не используются. FieldList не может одновременно содержать Value и Element или ElementNode. |
Field |
Определяет данные, извлекаемые как поле набора данных. |
Attribute |
Пара «имя-значение» в ElementNode. Например, ID в узле элемента <Customer ID="1"> является атрибутом, а @ID(Integer) возвращает "1" как целочисленный тип данных в соответствующем поле данных ID. |
Value |
Значение элемента. Value может использоваться только в последнем ElementNode пути к элементу. Например, <Return> является конечным узлом. Если включить его в конце пути к элементу, значением Return {@} будет Chair. |
Element |
Значение именованного подэлемента. Например, Customers {}/Customer {}/LastName извлекает значения только для элемента LastName. |
Type |
Необязательный тип данных, который должен использоваться для поля, созданного из этого элемента. |
NamespacePrefix |
NamespacePrefix определяется в элементе XML-запроса. Если элемента XML-запроса не существует, пространства имен в XML ElementPath не обрабатываются. Если элемент XML-запроса существует, XML ElementPath имеет необязательный атрибут IgnoreNamespaces. Если параметр IgnoreNamespaces равен true, пространства имен в XML ElementPath и XML-документе не обрабатываются. Дополнительные сведения см. в разделе Синтаксис элемента XML Query для задания XML-данных отчета (службы SSRS). |
Пример (без пространств имен)
Во всех последующих примерах используется XML-документ Customers.xml. Эта таблица содержит примеры синтаксиса пути к элементу и результаты использования пути в запросе. Источником данных является XML-документ.
Примечание |
---|
Если путь к элементу пуст, запрос использует путь к элементу по умолчанию: первый путь к коллекции конечного узла. В первом примере пустой путь к элементу эквивалентен указанию пути /Customers/Customer/Orders/Order. Все значения узлов и атрибуты на этом пути возвращаются в результирующем наборе, а имена узлов и имена атрибутов представляются в качестве полей набора данных. |
Пример |
Поля в наборе данных |
---|---|
Не заполнено |
OrderQtyIDFirstNameLastNameCustomer.IDxmlns
Chair61BobbyMoore11https://www.adventure-works.com
Table12BobbyMoore11https://www.adventure-works.com
Sofa28CrystalHu20https://www.adventure-works.com
EndTables215WyattDiaz33https://www.adventure-works.com
|
Customers {}/Customer |
FirstNameLastNameID
BobbyMoore11
CrystalHu20
WyattDiaz33
|
Customers {}/Customer {}/LastName |
LastName
Moore
Hu
Diaz
|
Customers {}/Customer {}/Orders/Order {@,@Qty} |
OrderQty
Chair6
Table1
Sofa2
EndTables2
|
Customers {}/Customer/Orders/Order{ @ID(Integer)} |
Order.IDFirstNameLastNameID
1BobbyMoore11
2BobbyMoore11
8CrystalHu20
15WyattDiaz33
|
XML-документ: Customers.xml
Чтобы проверить примеры пути к элементу из предыдущего раздела, можно скопировать этот XML-документ и сохранить его в URL-адресе, доступном из конструктора отчетов, а затем использовать этот XML-документ в качестве источника XML-данных, например https://localhost/Customers.xml.
<?xml version="1.0"?>
<Customers xmlns="https://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 в запрос
Создайте источник XML-данных с пустой строкой соединения.
Создайте новый набор данных для источника XML-данных.
В диалоговом окне Свойства набора данных нажмите кнопку Конструктор запросов. Откроется текстовое диалоговое окно конструктора запросов.
В панели запросов введите следующие две строки:
<Query>
<XmlData>
Скопируйте содержимое документа Customers.XML и вставьте его в панель запроса после <XmlData>.
В панели запроса удалите первую строку, скопированную из документа Customers.XML: <?xml version="1.0"?>
В конце запроса добавьте две следующие строки:
<XmlData>
<Query>
Нажмите кнопку Выполнить запрос (!).
В результирующем наборе будет 4 строки данных со следующими столбцами: xmlns, Customer.ID, FirstName, LastName, ID, Qty, Order.
Нажмите кнопку ОК.
См. также