Метод nodes() (тип данных xml)
Метод nodes() незаменим в тех случаях, когда экземпляр типа данных xml необходимо разделить на реляционные данные. Он позволяет идентифицировать узлы, которые будут ставиться в соответствие новой строке.
У каждого экземпляра типа данных xml имеется неявно заданный узел контекста. Для сохраняемого в столбце или переменной экземпляра XML таким узлом является узел документов. Узел документа является неявным узлом, который находится на верхнем уровне каждого экземпляра типа данных xml.
Метод nodes() возвращает набор строк, содержащий логические копии исходных экземпляров XML. В таких логических копиях контекстным узлом каждого экземпляра строки устанавливается один из узлов, идентифицируемых выражением запроса. Таким образом последующие запросы могут перемещаться относительно этих контекстных узлов.
Из этих наборов строк могут извлекаться несколько значений. Например, метод value() может быть применен к набору строк, возвращенному методом nodes(), для извлечения нескольких значений из исходного экземпляра XML. Метод value(), примененный к экземпляру XML, возвращает только одно значение.
Синтаксис
nodes (XQuery) as Table(Column)
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Аргументы
XQuery
Строковый литерал, выражение XQuery. Если выражение запроса конструирует узлы, эти сконструированные узлы представлены в результирующем наборе строк. Если результатом выражения запроса является пустая последовательность, набор строк также будет пустым. Если статическим результатом выражения запроса является последовательность, которая вместо узлов содержит атомарные значения, возникает статическая ошибка.
Таблица(столбец)
Имя таблицы и имя столбца для результирующего набора строк.
Замечания
В качестве примера предположим, что имеется следующая таблица:
T (ProductModelID INT, Instructions XML)
В таблице хранится следующее руководство по изготовлению. Здесь показан только фрагмент этого документа. Обратите внимание, что в документе указываются три места производства.
Вызов метода nodes() с выражением запроса /root/Location возвращает набор из трех строк, каждая из которых содержит логическую копию исходного XML-документа с контекстным элементом, присвоенным одному из узлов :
Product ModelID Instructions ---------------------------------- 1 1 1
Затем для набора строк можно выполнять запросы при помощи методов типа данных xml. Следующий запрос извлекает поддерево элемента контекста для каждой сформированной строки:
SELECT T2.Loc.query('.') FROM T CROSS APPLY Instructions.nodes('/root/Location') AS T2(Loc)
ProductModelID Instructions ---------------------------------- 1 1 1
Возвращаемый набор строк сохраняет информацию о типе. Методы типа данных xml (query(), value(), exist() и nodes()) могут применяться к результату, возвращенному методом nodes(). Однако вы не можете использовать метод modify(), чтобы изменить экземпляр XML.
Кроме того, контекстный узел в наборе строк не может быть материализован. Это означает, что вы не можете использовать его в инструкции SELECT. Однако он может использоваться в выражениях IS NULL и COUNT(*).
Сценарии применения метода nodes() и инструкции OPENXML (Transact-SQL) совпадают. Таким образом обеспечивается представление набора строк XML. Однако при применении метода nodes() в таблице, содержащей несколько строк XML-документов, необязательно использовать курсоры.
Набор строк, возвращаемый методом nodes(), является неименованным набором строк. Поэтому он должен быть явно именован с помощью механизма псевдонимов.
Функция nodes() не может быть применена непосредственно к результатам определенной пользователем функции. Чтобы использовать функцию nodes() с результатом скалярной функции, определенной пользователем, вы можете:
- назначить переменной результат функции, определенной пользователем;
- воспользоваться производной таблицей и присвоить псевдоним столбца возвращаемому значению определенной пользователем функции, после чего применить инструкцию CROSS APPLY , чтобы выбрать данные из псевдонима.
В следующем примере показан один из способов использования инструкции CROSS APPLY для выборки из результата пользовательской функции.
USE AdventureWorks; GO CREATE FUNCTION XTest() RETURNS XML AS BEGIN RETURN ''; END; GO SELECT A2.B.query('.') FROM (SELECT dbo.XTest()) AS A1(X) CROSS APPLY X.nodes('.') A2(B); GO DROP FUNCTION XTest; GO
Примеры
Применение метода nodes() к переменной типа данных xml
В этом примере рассматривается XML-документ с < Root >элементом верхнего уровня и тремя < row >дочерними элементами. Запрос использует метод nodes() для задания контекстных узлов, по одному для каждого элемента < row >. Метод nodes() возвращает набор из трех строк. Каждая строка имеет логическую копию исходного XML, с контекстными узлами, идентифицирующими разные элементы < row >исходного документа.
Запрос возвращает контекстный узел из каждой строки:
DECLARE @x XML SET @x='
|
' SELECT T.c.query('.') AS result FROM @x.nodes('/Root/row') T(c) GO
В следующем примере метод запроса возвращает элемент контекста и его содержимое:
Вследствие применения родительского метода доступа на контекстных узлах возвращается элемент < Root >для всех трех узлов:
SELECT T.c.query('..') AS result FROM @x.nodes('/Root/row') T(c) GO
Задание метода nodes() для столбца типа данных xml
В этом примере использованы инструкции по производству велосипедов, которые хранятся в столбце Instructions типа xml в таблице ProductModel.
В следующем примере метод nodes() применяется к столбцу Instructions типа xml в таблице ProductModel .
Метод nodes() задает элементы < Location >как контекстные узлы, указывая путь /MI:root/MI:Location . Конечный набор строк включает в себя логические копии исходного документа, по одной для каждого узла < Location >в документе, с контекстным узлом, заданным для элемента < Location >. В качестве результата функция nodes() выдает набор контекстных узлов < Location >.
Метод query() , применяемый к этому набору строк, запрашивает self::node и возвращает элемент для каждой строки.
В этом примере запрос задает каждый элемент < Location >как контекстный узел в производственной инструкции конкретной модели продукта. Вы можете использовать эти контекстные узлы, чтобы извлечь такие значения:
- Найти идентификаторы расположения в каждом элементе
- Извлечь этапы производства (дочерние элементы < step >) в каждом элементе
Этот запрос возвращает контекстный элемент, у которого в методе ‘.’ используется сокращенный синтаксис self::node() для query() .
Обратите внимание на следующее:
- Метод nodes() применяется к столбцу Instructions и возвращает набор строк T (C) . Этот набор строк содержит логические копии исходного руководства по изготовлению с /root/Location в качестве контекстного элемента.
- Инструкция CROSS APPLY применяет метод nodes() к каждой строке в таблице ProductModel и возвращает только строки, образующие результирующий набор.
SELECT C.query('.') as result FROM Production.ProductModel CROSS APPLY Instructions.nodes(' declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"; /MI:root/MI:Location') as T(C) WHERE ProductModelID=7
Частичный результат:
Применение метода nodes() к набору строк, возвращенному другим методом nodes()
В следующем коде из столбца Instructions таблицы ProductModel запрашиваются XML-документы, составляющие руководство по изготовлению. Запрос возвращает набор строк, содержащий идентификатор производственной модели, места производства и шаги производства.
Обратите внимание на следующее:
- Метод nodes() применяется к столбцу Instructions и возвращает набор строк T1 (Locations) , Этот набор строк содержит логические копии исходного руководства по изготовлению с /root/Location в качестве контекстного элемента.
- Метод nodes() применяется к набору строк T1 (Locations) и возвращает набор строк T2 (steps) . Этот набор строк содержит логические копии исходного руководства по изготовлению с /root/Location/step в качестве контекстного элемента.
SELECT ProductModelID, Locations.value('./@LocationID','int') AS LocID, steps.query('.') AS Step FROM Production.ProductModel CROSS APPLY Instructions.nodes(' declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"; /MI:root/MI:Location') AS T1(Locations) CROSS APPLY T1.Locations.nodes(' declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"; ./MI:step ') AS T2(steps) WHERE ProductModelID=7 GO
ProductModelID LocID Step ---------------------------- 7 10 7 10 . 7 20 7 20 7 20 .
В запросе префикс MI объявляется два раза. Вместо этого можно воспользоваться WITH XMLNAMESPACES , чтобы объявить этот префикс один раз и использовать его в запросе:
WITH XMLNAMESPACES ( 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions' AS MI) SELECT ProductModelID, Locations.value('./@LocationID','int') AS LocID, steps.query('.') AS Step FROM Production.ProductModel CROSS APPLY Instructions.nodes(' /MI:root/MI:Location') AS T1(Locations) CROSS APPLY T1.Locations.nodes(' ./MI:step ') as T2(steps) WHERE ProductModelID=7 GO
Инструкция OPENXML (SQL Server)
OPENXML — это ключевое слово Transact-SQL, которое предоставляет набор строк над XML-документами в памяти, похожими на таблицу или представление. OPENXML позволяет получить доступ к XML-данным, как будто это реляционный набор строк. Это делается при помощи представления внутреннего отображения XML-документа в виде набора строк. Записи в наборе строк могут храниться в таблицах базы данных.
OPENXML может использоваться в инструкциях SELECT и SELECT INTO в любых позициях, где в качестве источника могут присутствовать поставщики наборов строк, представления или функция OPENROWSET. Сведения о синтаксисе OPENXML см. в разделе OPENXML (Transact-SQL).
Чтобы писать запросы к XML-документу с использованием OPENXML, необходимо сначала вызвать хранимую процедуру sp_xml_preparedocument. Таким образом производится синтаксический анализ XML-документа и возвращается дескриптор для проанализированного документа, готового к использованию. Проанализированный документ является представлением дерева объектной модели документа (DOM) различных узлов в XML-документе. Дескриптор документа передается OPENXML. Затем инструкция OPENXML выдает представление документа в виде набора строк, основываясь на переданных ей аргументах.
Хранимая процедураsp_xml_preparedocument использует обновленную под SQL версию средства синтаксического анализа MSXML, Msxmlsql.dll. Эта версия средства синтаксического анализа MSXML была разработана для поддержки SQL Server и обеспечения обратной совместимости с MSXML версии 2.6.
Внутреннее представление XML-документа должно быть удалено из памяти посредством вызова системной хранимой процедуры sp_xml_removedocument для освобождения памяти.
На следующей иллюстрации показан этот процесс.
Обратите внимание на то, что для понимания OPENXML необходимо иметь общее представление о запросах XPath и XML. Дополнительные сведения о поддержке XPath в SQL Server см. в разделе Использование запросов XPath в SQLXML 4.0.
OpenXML позволяет параметризовать шаблоны XPath столбцов и строк как переменные. Такая параметризация может привести к включению выражений XPath, если разработчик допускает демонстрацию параметризации внешним пользователям (например, если аргументы предоставляются через вызываемую извне хранимую процедуру). Чтобы избежать подобных потенциально опасных ситуаций, рекомендуется никогда не допускать демонстрации аргументов XPath внешним вызывающим программам.
пример
В следующем примере показано применение процедуры OPENXML в инструкции INSERT и инструкции SELECT . Образец XML-документа содержит элементы и .
Сначала вызывается хранимая процедура sp_xml_preparedocument для проведения синтаксического анализа XML-документа. Проанализированный документ является древовидным представлением узлов (элементов, атрибутов, текста и комментариев) в XML-документе. OPENXML ссылается на этот проанализированный XML-документ и выдает представление всех частей этого XML-документа в виде набора строк. Инструкция INSERT , использующая функцию OPENXML , может вставлять данные из такого набора строк в таблицу базы данных. Можно вызывать функцию OPENXML несколько раз, получая и обрабатывая представление в виде набора строк различных частей XML-документа. Например, их можно вставить в различные таблицы. Данный процесс также называют разделение XML-данных по таблицам.
В следующем примере XML-документ разрезается таким образом, что элементы сохраняются в таблице Customers , а элементы сохраняются в таблице Orders с помощью двух инструкций INSERT . Этот пример также демонстрирует инструкцию SELECT , использующую функцию OPENXML , которая получает элементы CustomerID и OrderDate из XML-документа. Последним шагом обработки является повторный вызов процедуры sp_xml_removedocument . Это позволяет освободить память, выделенную для внутреннего древовидного представления XML, создаваемого в фазе синтаксического анализа.
-- Create tables for later population using OPENXML. CREATE TABLE Customers (CustomerID varchar(20) primary key, ContactName varchar(20), CompanyName varchar(20)); GO CREATE TABLE Orders( CustomerID varchar(20), OrderDate datetime); GO DECLARE @docHandle int; DECLARE @xmlDocument nvarchar(max); -- or xml type SET @xmlDocument = N' No Orders yet! '; EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument; -- Use OPENXML to provide rowset consisting of customer data. INSERT Customers SELECT * FROM OPENXML(@docHandle, N'/ROOT/Customers') WITH Customers; -- Use OPENXML to provide rowset consisting of order data. INSERT Orders SELECT * FROM OPENXML(@docHandle, N'//Orders') WITH Orders; -- Using OPENXML in a SELECT statement. SELECT * FROM OPENXML(@docHandle, N'/ROOT/Customers/Orders') WITH (CustomerID nchar(5) '../@CustomerID', OrderDate datetime); -- Remove the internal representation of the XML document. EXEC sp_xml_removedocument @docHandle;
На следующем рисунке показано XML-дерево, полученное в результате анализа предыдущего XML-документа и созданное с помощью хранимой процедуры sp_xml_preparedocument.
Параметры OPENXML
К числу аргументов OPENXML относятся:
- дескриптор XML-документа (idoc);
- выражение XPath для идентификации узлов, которые должны быть сопоставлены со строками (rowpattern);
- описание набора строк, который должен быть создан;
- сопоставление столбцов набора строк и узлов XML;
Дескриптор XML-документа (idoc)
Дескриптор документа возвращается хранимой процедурой sp_xml_preparedocument .
Выражение XPath для идентификации узлов, обрабатываемых (rowpattern)
Выражение XPath, указанное аргументом rowpattern , распознает набор узлов в XML-документе. Каждый узел, распознанный rowpattern , соотносится с отдельной строкой в наборе строк, созданном OPENXML.
Узлами, распознанными выражением XPath, могут быть любые узлы XML в XML-документе. Если rowpattern идентифицирует набор элементов в XML-документе, то для каждого узла элемента имеется одна строка в наборе строк. Например, если rowpattern приводит к атрибуту, создается строка для каждого узла атрибута, выбранного rowpattern.
Описание создаваемого набора строк
Схема набора строк используется OPENXML для создания результирующего набора строк. Можно использовать нижеследующие параметры при указании схемы набора строк.
Использование формата таблицы edge
Для указания схемы набора строк следует использовать формат краевой таблицы. Не используйте предложение WITH.
При этом OPENXML возвращает набор строк в формате краевой таблицы. Ее так называют потому, что каждый край проанализированного XML-документа сопоставляется со строкой в наборе строк.
Краевые таблицы представляют внутри отдельной таблицы подробную структуру XML-документа. Структура включает в себя имена элементов и атрибутов, иерархию документа, пространства имен и инструкции по обработке. Формат пограничной таблицы позволяет получить дополнительные сведения, которые не предоставляются с помощью метапродажа. Дополнительные сведения о метасвойствах см. в разделе Specify Metaproperties in OPENXML.
Дополнительные сведения, предоставляемые краевой таблицей, позволяют сохранять и запрашивать тип данных элемента и атрибута, тип узла, а также сохранять и запрашивать сведения о структуре XML-документа. С учетом этих дополнительных сведений может стать возможным построение собственной системы управления XML-документами.
Используя краевую таблицу, можно писать хранимые процедуры, которые рассматривают XML-документы как входные данные большого двоичного объекта (BLOB), создают краевую таблицу, а затем извлекают и анализируют документ на более детальном уровне. Этот детальный уровень может включать в себя выявление иерархии документа, имен элементов и атрибутов, пространств имен и инструкций по обработке.
Граничная таблица также может служить форматом хранения XML-документов, если сопоставление с другими реляционными форматами не является логическим, а поле ntext не предоставляет достаточно структурных сведений.
В ситуациях, когда возможно использование синтаксического анализатора XML для исследования XML-документа, можно вместо этого применить краевую таблицу, чтобы получить те же сведения.
В представленной ниже таблице описывается структура граничной таблицы.
| Имя столбца | Тип данных | Описание: |
|---|---|---|
| id | bigint | Уникальный идентификатор узла документов. |
Ниже приведены значения, которые могут быть представлены в этом столбце для указания типа узла.
1 = Узел элемента
2 = Узел атрибута
3 = Узел текста
4 = Узел раздела CDATA
5 = Узел ссылки на сущность
6 = Узел сущности
7 = Узел инструкции по обработке
8 = Узел комментария
9 = Узел документа
10 = Узел типа документа
11 = Узел фрагмента документа
12 = Узел нотации
Использование предложения WITH для указания существующей таблицы
Можно использовать предложение WITH, чтобы указать имя существующей таблицы. Чтобы сделать это, просто укажите имя существующей таблицы, схема которой может быть использована OPENXML для создания набора строк.
Использование предложения WITH для указания схемы
Можно использовать предложение WITH, чтобы указать полную схему. При указании схемы набора строк указываются имена столбцов, их типы данных и их сопоставление с XML-документом.
Можно указать шаблон столбца, применив аргумент ColPattern в SchemaDeclaration. Указанный шаблон столбца используется для сопоставления столбца набора строк с узлом XML, определенным rowpattern, а также используется для определения типа сопоставления.
Если colPattern не указан для столбца, столбец набора строк сопоставляется с XML-узлом с тем же именем, в зависимости от сопоставления, указанного параметром флагов . Однако если аргумент ColPattern задан как часть указания схемы в предложении WITH, он переопределяет сопоставление, указанное аргументом flags .
Сопоставление между столбцами набора строк и узлами XML
В инструкции OPENXML можно при необходимости указать тип сопоставления, например атрибутивное или элементное, между столбцами набора строк и узлами XML, определенными посредством rowpattern. Эти данные используются в преобразовании между узлами XML и столбцами набора строк.
Сопоставление может быть указано двумя способами, в том числе и обоими сразу:
- Используя аргумент flags Указание сопоставления посредством аргумента flags предполагает соответствие имен, в котором узлы XML сопоставляются с соответствующими столбцами набора строк, имеющими то же имя.
- Используя аргумент ColPatternColPattern, выражение XPath, указывается как часть SchemaDeclaration в предложении WITH. Сопоставлением, указанным в ColPattern , перекрывается сопоставление, указанное аргументом flags . ColPattern можно использовать для указания типа сопоставления, такого как атрибутивный или элементный, который переопределяет или расширяет сопоставление по умолчанию, указанное аргументом flags. ColPattern указывается в следующих ситуациях:
- Имя столбца в наборе строк отличается от имени атрибута или элемента, с которым оно сопоставлено. В этом случае ColPattern используется для определения имени элемента или атрибута в формате XML, с которым сопоставлен столбец набора строк.
- Необходимо сопоставить атрибут метасвойства со столбцом. В этом случае ColPattern используется для определения метасвойства, с которым сопоставлен столбец набора строк. Дополнительные сведения о том, как использовать метасвойства, см. в разделе Определение метасвойств в инструкции OPENXML.
Оба аргумента: и flags , и ColPattern , являются необязательными. Если сопоставление не указано, предполагается использование атрибутивного сопоставления, которое является значением по умолчанию для параметра flags .
Сопоставление с атрибутами
При присвоении параметру flags в OPENXML значения 1 (XML_ATTRIBUTES) указывается атрибутивное сопоставление. Если аргумент flags содержит XML_ ATTRIBUTES, демонстрируемый набор строк предоставляет или потребляет строки, где каждый элемент XML представлен в виде строки. Атрибуты XML сопоставляются с атрибутами, определенными в schemaDeclaration или предоставляемыми предложением TableName предложения WITH на основе соответствия имени. Соответствие имен означает, что атрибуты XML, имеющие определенное имя, хранятся в столбце набора строк с тем же именем.
Если имя столбца отличается от имени атрибута, с которым оно сопоставлено, должен быть указан аргумент ColPattern .
Если XML-атрибут имеет квалификатор пространства имен, имя столбца в наборе строк должно также иметь квалификатор.
Сопоставление с элементом
При присвоении параметру flags в OPENXML значения 2 (XML_ELEMENTS) указывается элементное сопоставление. Это похоже на сопоставление с атрибутами , за исключением следующих различий:
- Соответствие имен в примере сопоставления: при сопоставлении столбца с элементом XML с тем же именем выбираются простые подэлементы, если не указан шаблон на уровне столбца. В процессе получения, если подэлемент является составным, поскольку содержит дополнительные подэлементы, столбцу присваивается значение NULL. При этом значения атрибутов подэлементов пропускаются.
- В случае с несколькими подэлементами, имеющими одно и то же имя, возвращается первый узел.
См. также
- sp_xml_preparedocument (Transact-SQL)
- sp_xml_removedocument (Transact-SQL)
- OPENXML (Transact-SQL)
- XML-данные (SQL Server)
Распарсить сложный XML

Ошибка The error description is ‘An invalid character was found in text content.’.
Если бы не было тегов и , то все бы хорошо разобралось.
А так не знаю, что и делать. Подскажите, пожалуйста!94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:сложный запрос sql xml
1. Сoздaть пepeмeнную типa XML, кoтopaя coдepжит в иepapхичecкoм видe дaнныe o гpуппaх .Распарсить xml
Здравствуйте! Ребята, подскажите, каким образом можно корректно распарить xml документ при помощи.Распарсить XML
Доброго времени суток. Есть xml файл следующего в которых имеются записи следующего содержания: .3408 / 2068 / 738
Регистрация: 02.06.2013
Сообщений: 5,059
Сообщение от Lenoshka 
А так не знаю, что и делать. Подскажите, пожалуйста!
Нельзя обработать невалидный xml. Поэтому либо требуйте у авторов валидный xml, либо приводите сами к валидному виду.
Регистрация: 22.02.2013
Сообщений: 117
Записей в блоге: 2Проверила XML на корректность — все нормально. Схемы для проверки валидности нет. А какой вид нормальный для данного документа?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
> > >112 > >0 > >99 > >43 > >gfdf > >AM|MC > > > > >1388 > >0 > >3 > > > >Here is some text > > > > >20141215 17:25:31 > >ghgj > >.. > > >
Он же вроде бы отвечает всем требованиям?
Спасибо!
19 / 19 / 12
Регистрация: 09.12.2014
Сообщений: 250Lenoshka, вот что выдал на ваш последний хмл файл мой редактор:
Тег конца «ac» не соответствует тегу начала «acc». Ошибка при обработке ресурса »file:///D:/kml.xml». Строка 14,По.у вас и в 1 посте ошибка в теге: и в последнем:
вам нужно следить за синтаксисом и всё у вас получится.Регистрация: 22.02.2013
Сообщений: 117
Записей в блоге: 2texnix, Это не проблема в синтаксисе, это опечатка (реальные названия не хотелось бы показывать, т.к. это рабочий документ). В оригинале открывающие/закрывающие теги совпадают
19 / 19 / 12
Регистрация: 09.12.2014
Сообщений: 2501 2 3 4 5 6 7 8 9 10 11 12 13 14
DECLARE @idoc int, @doc varchar(1000); SET @doc =' '; --Create an internal representation of the XML document. EXEC sp_xml_preparedocument @idoc OUTPUT, @doc; -- Execute a SELECT statement that uses the OPENXML rowset provider. SELECT * FROM OPENXML (@idoc, '/root/header',1) WITH (IMT varchar(10) ,[AS] int);
вот такую штуку у меня скуэль сьел и не подавился. Может быть вам стоит распарсить функциями работы со строками ваш xml к такому виду?
3408 / 2068 / 738
Регистрация: 02.06.2013
Сообщений: 5,059
Сообщение от Lenoshka 
Проверила XML на корректность — все нормально.
Вы можете считать, что сервер вас дурит, сообщая о несуществующей ошибке. Только это бесперспективный путь.
Регистрация: 22.02.2013
Сообщений: 117
Записей в блоге: 2Я не считаю, что сервер меня обманывает, я пытаюсь понять, в чем у нас взгляды на корректность расходятся.
Эх. Придется элементы в атрибуты превращать.
Сообщение вида1 2 3 4 5 6 7 8 9
> IMT="112" AS="0" IS="1388" ISS="0" IC="107032" BT="AM|MC"/> > A="0" pm="0" acc="3"/> Msg="some text"/> > MDTe="20141216 15:43:16" IdK="54671" SM=". "/> >
Разбирает без проблем (правда каждый тег отдельным парсером)
3408 / 2068 / 738
Регистрация: 02.06.2013
Сообщений: 5,059
Сообщение от Lenoshka 
Я не считаю, что сервер меня обманывает, я пытаюсь понять, в чем у нас взгляды на корректность расходятся.
А как вы корректность проверяли? Глазами?
В общем, если хотите ответа, публикуйте проблемный xml. А то получается, что мы тут в угадайку играем.Регистрация: 22.02.2013
Сообщений: 117
Записей в блоге: 21 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
> > >112 > >0 > >99 > >43 > >gfdf > >AM|MC > > > > >1388 > >0 > >3 > > > >Here is some text > > > > >20141215 17:25:31 > >ghgj > >.. > > >
Проверялся при помощи http://okitgo.ru/xml/proverka-xml.html
3408 / 2068 / 738
Регистрация: 02.06.2013
Сообщений: 5,059
Lenoshka, этот документ ошибки не дает.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесьРаспарсить xml
всем привет, как распарсить данный xml файл? <?xml version="1.0" encoding="utf-8"?> <response.распарсить XML на C
Помогите, пожалуйста, кто-то уже наверняка встречался с такой задачей, нужно распарсить XML в С. Я.
Распарсить XML
Уважаемые программисты помогите пожалуйста разобрать такого вида xml данные вывести в мемо Надо.Распарсить XML
SimpleXMLElement Object ( => 0 => SimpleXMLElement Object ( ) => SimpleXMLElement Object ( .Или воспользуйтесь поиском по форуму:
Методы типа данных XML стр. 1
Тип данных XML впервые появился в Cистема управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server 2005.
Он может содержать до 2 Гб данных.

В языке Transact-SQL (T-SQL) — процедурное расширение языка SQL, используемое для программирования на стороне сервера в Microsoft SQL Server и Sybase ASE. Transact-SQL имеется пять методов для работы с типом данных XML:
- query() – используется для извлечения XML фрагментов из XML документов;
- value() – используется для извлечения значений конкретных узлов или атрибутов XML документов;
- exist() – используется для проверки существования узла или атрибута. Возвращает 1, если узел или атрибут найден, и 0, если не найден;
- modify() – изменяет XML документ;
- nodes() – разделяет XML документ на несколько строк по узлам.
Методы типа данных XML принимают на вход выражение XPath или запрос XQuery.
Для примеров в данном учебнике будем использовать базу данных с таблицами, содержащими столбцы типа данных XML.
Таблица tArtist содержит информацию о музыкальных группах, исполнителях и их альбомах.
Заполним таблицы тестовыми данными.