powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / [2014.1] Не полностью читается XData
8 сообщений из 8, страница 1 из 1
[2014.1] Не полностью читается XData
    #39560721
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть у меня класс, где в XData я хочу хранить много-много текста для начального заполнения чего-то. Например:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
XData pass
{
<root>
<item1><![CDATA[
{
  "formatVersion" : 1,
  "passTypeIdentifier" : "pass ...",
  "serialNumber" : "...",
  "teamIdentifier" : "...",
  "locations":[  
   {  
      "longitude":39.926853,
      "latitude":43.427665,
      "relevantText":"..."
   },
... тут еще множество локаций ...
}



Плюс функция, которую я где-то подсмотрел, которая получает эти данные в виде строки из кода:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
ClassMethod getNodeText(xdataName As %String, nodeName As %String) As %String
{
	s stream = ##class(%Dictionary.CompiledXData).%OpenId(..%ClassName(1)_"||"_xdataName).Data
	d ##class(%XML.TextReader).ParseStream(stream,.reader)
	
	s text = ""
	while reader.Read() {
		if reader.Name = nodeName {
			d reader.Read()
			s text = reader.Value
			q	
		}
	}
	
	q text
}



Проблем в том, что читается не весь узел, а только часть <item1> из примера. Как это победить?
...
Рейтинг: 0 / 0
[2014.1] Не полностью читается XData
    #39560784
Александр Коблов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
coder1cv8,

В 2017.1 (может и раньше) в XData можно json напрямую вставлять:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
XData pass [ MimeType = application/json ]
{
{
  "formatVersion" : 1,
  "passTypeIdentifier" : "pass ...",
  "serialNumber" : "...",
  "teamIdentifier" : "...",
  "locations":[  
   {  
      "longitude":39.926853,
      "latitude":43.427665,
      "relevantText":"..."
   }
   ]
 }
}
...
Рейтинг: 0 / 0
[2014.1] Не полностью читается XData
    #39560858
eduard93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Коблов, в XData всегда можно что угодно писать, только не всё подсвечивать будет.

Если нужен json в 2016.1+ можно делать так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
ClassMethod GetJSON() As %DynamicObject [CodeMode=expression]
{
{
  "formatVersion" : 1,
  "passTypeIdentifier" : "pass ..."
}
}
...
Рейтинг: 0 / 0
[2014.1] Не полностью читается XData
    #39561048
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эм... У меня 2014.1
...
Рейтинг: 0 / 0
[2014.1] Не полностью читается XData
    #39561187
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело же тут не совсем в json. Видимо, есть какое-то ограничение в %XML.TextReader, которое не позволяет ему прочесть содержимое элемента целиком.
...
Рейтинг: 0 / 0
[2014.1] Не полностью читается XData
    #39561281
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
coder1cv8,

Код: sql
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.
26.
27.
28.
29.
30.
31.
32.
Class %XML.TextReader...
{
...
/// Public property, returns the value of the current node. The following types have a value to return:
/// <P>
/// <B>Node Type</B> :: <B>Value</B>
/// <P>
/// attribute :: The value of the attribute. 
/// <P>
/// cdata :: The content of the CDATA section. 
/// <P>
/// comment :: The content of the comment. 
/// <P>
/// processinginstruction :: The entire content of the processing instruction, excluding the target. 
/// <P>
/// ignorablewhitespace :: The white space between markup in a mixed content model. 
/// <P>
/// chars :: The content of the text node. 
/// <P>
/// entity :: The expanded content of the entity 
Property Value As %String;
...
}

/// The <b>%String</b> data type class represents a string.
/// <p>The logical value of the <b>%String</b> data type is a string.
Class %Library.String Extends %DataType [ System = 1 ]
{
/// The maximum number of characters the string can contain.
Parameter MAXLEN As INTEGER = 50;
...
}


Ну и не забываем про ограничения на размер для для локальных переменных )))
...
Рейтинг: 0 / 0
[2014.1] Не полностью читается XData
    #39561309
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и судя по реализации метода Read из класса %XML.TextReader, его использование подразумевается следующим образом:
Код: sql
1.
2.
3.
4.
5.
while reader.Read() {
    // читаем порцию данных из reader.Value
    // что-то делаем с прочитанными данными
    // и идем на следующий круг
}
...
Рейтинг: 0 / 0
[2014.1] Не полностью читается XData
    #39561353
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
П.С.М.,

а-а-а :) Спасибо!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / [2014.1] Не полностью читается XData
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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