powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / XML-проекция свойства в атрибут "value"
12 сообщений из 12, страница 1 из 1
XML-проекция свойства в атрибут "value"
    #38507361
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По умолчанию каше проецирует объект в тег вида

<SalesId>00138913_051</SalesId>

Можно ли настроить проекцию в атрибут?
Вот так хочу:

<SalesId value="00138913_051" />

XMLPROJECTION пробовал крутить, но что-то не получается.
...
Рейтинг: 0 / 0
XML-проекция свойства в атрибут "value"
    #38507465
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по документации

в классе например как этот:Class xmlproj.SimpleContentProp Extends (%RegisteredObject, %XML.Adaptor)
{

Property Simple1 As %String(XMLPROJECTION = "content");

Property Simple2 As %String(XMLPROJECTION = "attribute");

Property Simple3 As %String(XMLPROJECTION = "element");

}
данные должны получится что-то типа этого

Код: plaintext
<SimpleContentProp Simple2="other value">The quick brown fox jumps over the lazy dog</SimpleContentProp>
...
Рейтинг: 0 / 0
XML-проекция свойства в атрибут "value"
    #38507558
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovПо умолчанию каше проецирует объект в тег видаНе совсем понятно, что подразумевается под SalesId : имя класса, простого свойства или отношения, поэтому выбирайте сами:Class demo.test Extends (%RegisteredObject, %XML.Adaptor)
{

Parameter XMLNAME = "SalesId1";

Property P1 As %String(XMLNAME = "value", XMLPROJECTION = "attribute");

Relationship Children As demo.test(XMLPROJECTION = "none") [ Cardinality = many, Inverse = MyParent ];

Relationship MyParent As demo.test(XMLNAME = "SalesId2", XMLPROJECTION = "element") [ Cardinality = one, Inverse = Children ];

ClassMethod Test()
{
  s t=..%New()
  s t.P1="00138913_051"
  s t.MyParent=..%New()
  s t.MyParent.P1="00138913_052"

  d t.XMLExport()
}

}Результат:

Код: plaintext
1.
USER>d ##class(demo.test).Test()
<SalesId1 value="00138913_051"><SalesId2 value="00138913_052"></SalesId2></SalesId1>
...
Рейтинг: 0 / 0
XML-проекция свойства в атрибут "value"
    #38507569
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov ,

Что касается закрывающих тегов: Controlling the Closing of Elements
...
Рейтинг: 0 / 0
XML-проекция свойства в атрибут "value"
    #38507606
imdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov
servit

Я так понимаю, kolesov хочет, чтобы значение передавалось как атрибут тега, а не как внутреннее содержание тега.
Такого способа управления xml-тегами в Cache, как я понимаю, нет.
Так что остается только такой способ, как описал servit :
- добавить свойство, которое будет атрибутом тега, и которое будет содержать его значение
- в него записать значение самого тега (значение самого тега будем при этом пустым)
- и настроить вывод тега таким образом, чтобы пустой тег отображался в виде <tag />
...
Рейтинг: 0 / 0
XML-проекция свойства в атрибут "value"
    #38507782
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Class xmlproj.SomeClass Extends (%RegisteredObject, %XML.Adaptor)
{

Parameter XMLNAME = "SalesId";

Property valueId As %String(XMLNAME="value",XMLPROJECTION = "attribute");

}
...
Рейтинг: 0 / 0
XML-проекция свойства в атрибут "value"
    #38507794
imdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного неполно и запутанно написал. Вот пример (переделанный пример servit ):
Основной класс:Class demo.test Extends (%RegisteredObject, %XML.Adaptor)
{

Property SalesId As demo.SalesId;

ClassMethod Test()
{
  s s=##class(demo.SalesId).%New()
  s s.AttrValue="00138913_051"
  s t=..%New()
  s t.SalesId=s
  d t.XMLExport()
}

}
Класс типа для свойства SalesId:Class demo.SalesId Extends (%RegisteredObject, %XML.Adaptor)
{

Property AttrValue As %String(XMLNAME = "value", XMLPROJECTION = "attribute");

}
Результат:

Код: plaintext
1.
USER>d ##class(demo.test).Test()
<test><SalesId value="00138913_051"></SalesId></test>
...
Рейтинг: 0 / 0
XML-проекция свойства в атрибут "value"
    #38509316
sigmov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolesov

Стандартно для всех св-в - никак.
Нестандартно - нужно ковырять системный класс %Compiler.XML.Generator.Adaptor , но это - жесть.
...
Рейтинг: 0 / 0
XML-проекция свойства в атрибут "value"
    #38509495
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitkolesovПо умолчанию каше проецирует объект в тег видаНе совсем понятно, что подразумевается под SalesId : имя класса, простого свойства или отношения, поэтому выбирайте сами:
Извиняюсь за опечатку - конечно же свойство а не весь объект проецируется в узел.
Спасибо. Пробую разбираться.
...
Рейтинг: 0 / 0
XML-проекция свойства в атрибут "value"
    #38510599
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо. Опыт оказался неудачным.
Собственно, задумка была в том, чтобы описать такую структуру данных, в которую бы спроецировался внешний XML, построенный на value-атрибутах узлов.
Типа
ЭТРАН WS... <freightWeightStdGross value="1227"/> <freightWeightStdNet value="1227"/> <freightRealWeight value="27000"/> <freightDangerSignID value="1"/> ...
Сейчас мы это парсим через XPATH что не совсем удобно - узлов бывает больше сотни с вложенностями.
Я так понимаю, что дешевле будет вначале весь этот XML преобразовать к <node>value</node> виду, а затем уже с ним работать через проекцию.
Но все равно спасибо.
...
Рейтинг: 0 / 0
XML-проекция свойства в атрибут "value"
    #38511212
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovСобственно, задумка была в том, чтобы описать такую структуру данных, в которую бы спроецировался внешний XML, построенный на value-атрибутах узлов
Include %sqlMigration

Class demo.test Extends (%RegisteredObject, %XML.Adaptor)
{

Property freightWeightStdGross As array Of %Integer(XMLKEYNAME = "value", XMLPROJECTION = "element");

Property freightWeightStdNet As array Of %Integer(XMLKEYNAME = "value", XMLPROJECTION = "element");

Property freightRealWeight As array Of %Integer(XMLKEYNAME = "value", XMLPROJECTION = "element");

Property freightDangerSignID As array Of %Integer(XMLKEYNAME = "value", XMLPROJECTION = "element");

ClassMethod Export()
{
  s t=..%New()
  d t.freightWeightStdGross.SetAt($$$EMPTYSTR,1227)
  d t.freightWeightStdNet.SetAt($$$EMPTYSTR,1227)
  d t.freightRealWeight.SetAt($$$EMPTYSTR,27000)
  d t.freightDangerSignID.SetAt($$$EMPTYSTR,1)
  
  d t.XMLExport("top","literal,indent")
}

ClassMethod Import()
{
  #dim t As demo.test
  
  s xml(1)="<top><freightWeightStdGross value=""1227""></freightWeightStdGross><freightWeightStdNet value=""1227""></freightWeightStdNet><freightRealWeight value=""27000""></freightRealWeight><freightDangerSignID value=""1""></freightDangerSignID></top>"
  s xml(2)="<top><freightWeightStdGross value=""1228""/><freightWeightStdNet value=""1228""/><freightRealWeight value=""27001""/><freightDangerSignID value=""2""/></top>"

  s r = ##class(%XML.Reader).%New()
  d r.Correlate("top","demo.test")
  
  f i=1:1:2 {
    d r.OpenString(xml(i))
    i r.Next(.t) {
      w t.freightWeightStdGross.Next(),!
      w t.freightWeightStdNet.Next(),!
      w t.freightRealWeight.Next(),!
      w t.freightDangerSignID.Next(),!!
    }
  }
}

}

Результат:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 USER> d ##class(demo.test).Export()
<top>
  <freightWeightStdGross value="1227"></freightWeightStdGross>
  <freightWeightStdNet value="1227"></freightWeightStdNet>
  <freightRealWeight value="27000"></freightRealWeight>
  <freightDangerSignID value="1"></freightDangerSignID>
</top> 

 USER> d ##class(demo.test).Import()
1227
1227
27000
1
 
1228
1228
27001
2
...
Рейтинг: 0 / 0
XML-проекция свойства в атрибут "value"
    #38511435
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

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


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