Как посчитать количество строк в xml
Перейти к содержимому

Как посчитать количество строк в xml

  • автор:

TYPE directive in FOR XML queries

SQL Server support for the xml (Transact-SQL) data type enables you to optionally request that the result of a FOR XML query be returned as xml by specifying the TYPE directive. This allows you to process the result of a FOR XML query on the server. For example, you can specify an XQuery against it, assign the result to an xml type variable, or write Nested FOR XML queries.

SQL Server returns xml data type instance data to the client as a result of different server-constructs such as FOR XML queries that use the TYPE directive, or where the xml data type is used to return XML instance data values from SQL table columns and output parameters. In client application code, the ADO.NET provider requests this xml data type information to be sent in a binary encoding from the server. However, if you are using FOR XML without the TYPE directive, the XML data comes back as a string type. In any case, the client provider will always be able to handle either form of XML. Note that top-level FOR XML without the TYPE directive cannot be used with cursors.

Examples

The following examples illustrate the use of the TYPE directive with FOR XML queries.

Retrieving FOR XML query results as xml type

The following query retrieves customer contact information from the Contacts table. Because the TYPE directive is specified in FOR XML , the result is returned as xml type.

USE AdventureWorks2022; Go SELECT BusinessEntityID, FirstName, LastName FROM Person.Person ORDER BY BusinessEntityID FOR XML AUTO, TYPE; 

This is the partial result:

Assigning FOR XML query results to an xml type variable

In the following example, a FOR XML result is assigned to an xml type variable, @x . The query retrieves contact information, such as the BusinessEntityID , FirstName , LastName , and additional telephone numbers, from the AdditionalContactInfo column of xml TYPE . Because the FOR XML clause specifies TYPE directive, the XML is returned as xml type and is assigned to a variable.

USE AdventureWorks2022; GO DECLARE @x xml; SET @x = ( SELECT BusinessEntityID, FirstName, LastName, AdditionalContactInfo.query(' declare namespace aci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo"; declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes"; //act:telephoneNumber/act:number') as MorePhoneNumbers FROM Person.Person FOR XML AUTO, TYPE); SELECT @x; GO 

Querying results of a FOR XML query

The FOR XML queries return XML. Therefore, you can apply xml type methods, such as query() and value() , to the XML result returned by FOR XML queries.

In the following query, the query() method of the xml data type is used to query the result of the FOR XML query. For more information, see query() Method (xml Data Type).

USE AdventureWorks2022; GO SELECT (SELECT BusinessEntityID, FirstName, LastName, AdditionalContactInfo.query(' DECLARE namespace aci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo"; DECLARE namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes"; //act:telephoneNumber/act:number ') AS PhoneNumbers FROM Person.Person FOR XML AUTO, TYPE).query('/Person.Person[1]'); 

The inner SELECT . FOR XML query returns an xml type result to which the outer SELECT applies the query() method to the xml type. Note the TYPE directive specified.

This is the result:

  111-111-1111 112-111-1111   

In the following query, the value() method of the xml data type is used to retrieve a value from the XML result returned by the SELECT. FOR XML query. For more information, see value() Method (xml Data Type).

USE AdventureWorks2022; GO DECLARE @FirstPhoneFromAdditionalContactInfo varchar(40); SELECT @FirstPhoneFromAdditionalContactInfo = ( SELECT BusinessEntityID, FirstName, LastName, AdditionalContactInfo.query(' declare namespace aci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo"; declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes"; //act:telephoneNumber/act:number ') AS PhoneNumbers FROM Person.Person Contact FOR XML AUTO, TYPE).value(' declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes"; /Contact[@BusinessEntityID="1"][1]/PhoneNumbers[1]/act:number[1]', 'varchar(40)' ); SELECT @FirstPhoneFromAdditionalContactInfo; 

The XQuery path expression in the value() method retrieves the first telephone number of a customer contact whose BusinessEntityID is 1 .

If the TYPE directive is not specified, the FOR XML query result is returned as type nvarchar(max).

Using FOR XML query results in INSERT, UPDATE, and DELETE (Transact-SQL DML)

The following example demonstrates how FOR XML queries can be used in Data Manipulation Language (DML) statements. In the example, the FOR XML returns an instance of xml type. The INSERT statement inserts this XML into a table.

CREATE TABLE T1(intCol int, XmlCol xml); GO INSERT INTO T1 VALUES(1, ''); GO CREATE TABLE T2(XmlCol xml) GO INSERT INTO T2(XmlCol) SELECT (SELECT XmlCol.query('/Root') FROM T1 FOR XML AUTO,TYPE); GO 

See also

XML Введение

XML — это язык разметки подобный HTML. Расшифровывается как (англ. Extensible Markup Language — Расширяемый Язык Разметки) и является рекомендацией сообщества W3C в качестве языка разметки общего назначения (W3C recommended). В отличии от остальных языков разметки, XML сам по себе не определён (это означает, что вы должны сами определять используемые теги). Основной целью XML является передача данных между разными системами (даже концептуально разными), такими как интернет.

Много языков базируются на XML; Некоторые примеры: XHTML, MathML, SVG, XUL, XBL, RSS, и RDF. Вы можете создать свой.

«Корректный» XML (правильно сформированный)

Правила оформления

Для корректного XML документа должны исполняться следующие условия:

  • Правильное оформление документа.
  • Соблюдаться все синтаксические правила XML.
  • Документ должен соответствовать семантическим правилам языка (которые обычно заданны в схеме XML или DTD (англ. Document Type Definition (en-US))).

Пример

Пример ниже показывает документ с тегом, который не закрывает сам себя и не имеет закрывающего тега (это неправильно оформленный XML документ).

message> warning> Hello World   --> message> 

Давайте посмотрим на корректную версию этого документа:

message> warning> Hello World warning> message> 

Документ содержащий неопределённый тег является не корректным. Например, если мы не определили тег , документ не корректен.

Примечание: В большинство браузеров встроен дебаггер, который может идентифицировать плохо написанный XML документ.

Сущности

HTML и XML предлагают методы (которые называют сущности) для обращения к специальным зарезервированным символам (например угловые скобки, обозначающие начало и конец тега). Существует пять сущностей, которые вы обязательно должны знать:

Сущность Символ Описание
< Знак меньше (одна из угловых скобок)
> > Знак больше (одна из угловых скобок)
& & Амперсанд
" « Двойная кавычка
' Одинарная кавычка (апостроф)

Не смотря на то, что по умолчанию создано всего пять сущностей, вы можете добавить в документ свои сущности используя Document Type Definition (en-US) . Например, создать новую &warning; сущность, можно так:

Также вы можете использовать нумерические ссылки для специфический специальных символов. Например, © — это символ «©».

Отображение XML

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

Один из методов отображения XML — указать CSS (чтобы использовать в документе нужно прописать инструкцию xml-stylesheet , как показано в примере ниже).

Есть также много других мощных методов отображения XML, например, XSLT(англ. Extensible Stylesheet Language Transformations), который может использоваться для преобразование XML в другие языки такие, как HTML. Это делает XML очень универсальным.

Рекомендации

Эта статья является очень маленьким введением в XML, с очень маленьким количеством примеров и ссылок для того, чтобы вы могли начать работать с этим языком. Чтобы больше узнать про XML, вам придётся искать информацию и более информативные статьи в интернете.

Изучайте HTML (англ. HyperText Markup Language), знание HTML поможет вам лучше понять XML.

Смотрите также

  • XML.com
  • Extensible Markup Language (XML) @ W3.org
  • XML Example: A List Apart
  • Using XML: A List Apart

Статья Using XML — отличный ресурс с большим количеством информации о создании своего языка на основе XML.

Как посчитать количество строк в xml

В этой статье показано, как использовать синтаксический анализатор DOM, синтаксический анализатор SAX и XPath для подсчета количества указанных XML-элементов в Java.

Автор оригинала: mkyong.

В этой статье показано, как использовать DOM синтаксический анализатор, SAX синтаксический анализатор и XPath для подсчета количества указанного XML-элемента в Java.

  • 1. XML-файл
  • 2. Подсчитайте XML-элементы (анализатор DOM)
  • 3. Подсчитайте XML-элементы (XPath)
  • 4. Подсчитайте элементы XML (синтаксический анализатор SAX)
  • 5. Скачать Исходный Код
  • 6. Рекомендации

P.S Протестирован с Java 11.

1. XML-файл

Ниже приведен XML-файл для тестирования, и позже во всех примерах будет подсчитано количество XML-элементов, известных как “персонал”, и результат будет равен 2.

2. Подсчитайте XML-элементы (анализатор DOM)

Ниже приведен полный пример синтаксического анализатора DOM для подсчета количества элементов “персонал” в XML-файле.

3. Подсчитайте XML-элементы (XPath)

Ниже приведен полный пример DOM и XPath для подсчета количества элементов “персонал” в XML-файле.

4. Подсчитайте элементы XML (синтаксический анализатор SAX)

Ниже приведен полный пример синтаксического анализатора SAX для подсчета количества элементов “персонал” в XML-файле.

4.1 Мы можем создать обработчик SAX и подсчитать элементы в методе startElement() .

4.2 Запустите синтаксический анализатор SAX с помощью вышеупомянутого Обработчика элементов Count Sax .

Как реализовать подсчет количества дочерних узлов, внутри родительского узла некоторого XML-документа?

Мне необходимо посчитать какое количество узлов , располагается внутри родительского узла .
В данном примере их по 6 штук (в каждом узле ). Но в разных XML-документах это количество будет разным.

Как реализовать подсчет количества узлов внутри узла , в XML-документе?

P.S. Внутри одного XML-документа, количество узлов внутри узла , постоянно. То есть, если, к примеру, в первом узле находиться 5 узлов , то тогда и в остальных узлах , этого XML-документа, будет столько же узлов .

P.P.S. Я использую вот такой способ:

и этот способ всё правильно считает, но я думаю, что этот способ излишне нагружает процессор (так как 2 раза полностью «читается» XML-документ).

SimpleXMLElement::count

Этот метод подсчитывает количество дочерних элементов у текущего элемента.

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Возвращает число элементов у текущего элемента.

Примеры

Пример #1 Подсчёт количества дочерних элементов

$elem = new SimpleXMLElement ( $xml );

foreach ( $elem as $person )
?>

Xml Node List. Count Свойство

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Получает число узлов в объекте XmlNodeList .

Значение свойства

Число узлов в объекте XmlNodeList .

Примеры

В следующем примере создается XmlDocument объект и используется GetElementsByTagName метод и результирующий XmlNodeList метод для отображения всех названий книг.

Related posts:

  1. Компьютер или ноутбук что лучше для дизайнера
  2. Jira как создать фильтр
  3. Как выключить яндекс музыку на андроид
  4. Какие сайты работают без интернета

Syntax for STUFF/FOR XML PATH

I boiled down my query for readability and am still getting the error in the various ways I’ve tried to execute it:

SELECT STUFF((SELECT * FROM (SELECT N',' + N'first' UNION SELECT N',' + N'second') FOR XML PATH('')), 1, 1, '') 

Also tried:

SELECT STUFF((SELECT * FROM (SELECT N',' + N'first' UNION SELECT N',' + N'second')) FOR XML PATH(''), 1, 1, '') 

For a while I was getting

The FOR XML clause is invalid in views, inline functions, derived tables, and subqueries when they contain a set operator. To work around, wrap the SELECT containing a set operator using derived table syntax and apply FOR XML on top of it.

but amended the code per ExactHelp’s post. UPDATE Based on answer from @NenadZivkovic I came up with the following which did what I was looking to do:

WITH CTE_perca_categories AS ( SELECT category = STUFF((SELECT ', ' + category FROM perca_categories FOR XML PATH('')), 1, 2, '') ) , CTE_perca_tags AS ( SELECT tag = (SELECT ', ' + tag from perca_tags FOR XML PATH('')) ) SELECT CONCAT((SELECT * FROM CTE_perca_categories), (SELECT * FROM CTE_perca_tags)) 

Output (where tag begins with ‘Food’):

Charitable Giving, Nondiscretionary Spending, Saving, Discretionary Spending, Food, Dining, Groceries, Bills 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *