Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / [2014.1] Не полностью читается XData / 8 сообщений из 8, страница 1 из 1
28.11.2017, 17:03
    #39560721
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[2014.1] Не полностью читается XData
Есть у меня класс, где в 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
28.11.2017, 18:23
    #39560784
Александр Коблов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[2014.1] Не полностью читается XData
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
28.11.2017, 20:23
    #39560858
eduard93
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[2014.1] Не полностью читается XData
Александр Коблов, в XData всегда можно что угодно писать, только не всё подсвечивать будет.

Если нужен json в 2016.1+ можно делать так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
ClassMethod GetJSON() As %DynamicObject [CodeMode=expression]
{
{
  "formatVersion" : 1,
  "passTypeIdentifier" : "pass ..."
}
}
...
Рейтинг: 0 / 0
29.11.2017, 09:47
    #39561048
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[2014.1] Не полностью читается XData
Эм... У меня 2014.1
...
Рейтинг: 0 / 0
29.11.2017, 12:31
    #39561187
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[2014.1] Не полностью читается XData
Дело же тут не совсем в json. Видимо, есть какое-то ограничение в %XML.TextReader, которое не позволяет ему прочесть содержимое элемента целиком.
...
Рейтинг: 0 / 0
29.11.2017, 14:23
    #39561281
П.С.М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[2014.1] Не полностью читается XData
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
29.11.2017, 14:53
    #39561309
П.С.М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[2014.1] Не полностью читается XData
Да, и судя по реализации метода Read из класса %XML.TextReader, его использование подразумевается следующим образом:
Код: sql
1.
2.
3.
4.
5.
while reader.Read() {
    // читаем порцию данных из reader.Value
    // что-то делаем с прочитанными данными
    // и идем на следующий круг
}
...
Рейтинг: 0 / 0
29.11.2017, 15:42
    #39561353
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[2014.1] Не полностью читается XData
П.С.М.,

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


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