powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Данные в CDATA
3 сообщений из 3, страница 1 из 1
Данные в CDATA
    #39643593
Co_balt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Подскажите, как лучше добраться до данных в разделе CDATA -
1. При помощи XPath ?
2. В коде C# ?

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<?xml version="1.0" encoding="UTF-8"?>
<NotificationMessage>
   <Header>
      <Name>a</Name>
      <Description />
      <Destination>t</Destination>
      <CreatedDate>2018-05-12T11:29:31</CreatedDate>
      <ID>66eef29e-b5a2-4e3c-a264-1a690aa6eabd</ID>
      <Status>Delivered</Status>
   </Header>
   <Body>
      <Values>
         <Expression2 type="xsd:string" quality="Good" timeStamp="2018-05-12T11:29:26.7089184Z"><![CDATA[745.07]]></Expression2>
         <Expression1 type="xsd:string" quality="Good" timeStamp="2018-05-12T11:29:31.5051928Z"><![CDATA[24.32]]></Expression1>
      </Values>
   </Body>
   <Faults />
</NotificationMessage>
...
Рейтинг: 0 / 0
Данные в CDATA
    #39643649
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CDATA с т.з. DOM-модели - те же текстовые узлы. Поэтому через XPath они извлекаются как-то так:

Код: plaintext
/NotificationMessage/Body/Values/*/text()

На C# - куча вариантов: XmlDocument.SelectNodes("/NotificationMessage/Body/Values/*/text()") - вернет коллекцию элементов XmlCDataSection , нахождение [рекурсивным перебором] элементов Expression1 и Expression2, далее обращение к свойству InnerText, использование xml2linq
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
(найти Expression1 и Expression2 в виде XElement, обратиться к свойству Value), использование XPathDocument, итд:
var xd = new XmlDocument();
xd.Load(@"D:\Trash\1.xml");
foreach(XmlCDataSection n in xd.SelectNodes("/NotificationMessage/Body/Values/*/text()"))
  Console.WriteLine(n.Value);
Console.WriteLine("=============================");
var xd2 = XDocument.Load(xd.CreateNavigator().ReadSubtree());
foreach(var n in xd2.XPathSelectElements("/NotificationMessage/Body/Values/*"))
  Console.WriteLine(n.Value);
Console.WriteLine("=============================");
var xd3 = new XPathDocument(xd.CreateNavigator().ReadSubtree());
var iterator = xd3.CreateNavigator().Evaluate("/NotificationMessage/Body/Values/*/text()") as XPathNodeIterator;
foreach (XPathItem n in iterator)
  Console.WriteLine(n.Value);
...
Рейтинг: 0 / 0
Данные в CDATA
    #39644289
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое CDATA
TLDR; в CDATA обрамляется строка, которая может быть интерпретирована как часть текущей XML-разметки, но таковой не является.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Данные в CDATA
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]