|
XML-проекция свойства в атрибут "value"
|
|||
---|---|---|---|
#18+
По умолчанию каше проецирует объект в тег вида <SalesId>00138913_051</SalesId> Можно ли настроить проекцию в атрибут? Вот так хочу: <SalesId value="00138913_051" /> XMLPROJECTION пробовал крутить, но что-то не получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2013, 07:01 |
|
XML-проекция свойства в атрибут "value"
|
|||
---|---|---|---|
#18+
Судя по документации в классе например как этот: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
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2013, 09:51 |
|
XML-проекция свойства в атрибут "value"
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2013, 10:56 |
|
XML-проекция свойства в атрибут "value"
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2013, 11:08 |
|
XML-проекция свойства в атрибут "value"
|
|||
---|---|---|---|
#18+
kolesov servit Я так понимаю, kolesov хочет, чтобы значение передавалось как атрибут тега, а не как внутреннее содержание тега. Такого способа управления xml-тегами в Cache, как я понимаю, нет. Так что остается только такой способ, как описал servit : - добавить свойство, которое будет атрибутом тега, и которое будет содержать его значение - в него записать значение самого тега (значение самого тега будем при этом пустым) - и настроить вывод тега таким образом, чтобы пустой тег отображался в виде <tag /> ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2013, 11:31 |
|
XML-проекция свойства в атрибут "value"
|
|||
---|---|---|---|
#18+
Class xmlproj.SomeClass Extends (%RegisteredObject, %XML.Adaptor) { Parameter XMLNAME = "SalesId"; Property valueId As %String(XMLNAME="value",XMLPROJECTION = "attribute"); } ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2013, 13:22 |
|
XML-проекция свойства в атрибут "value"
|
|||
---|---|---|---|
#18+
Немного неполно и запутанно написал. Вот пример (переделанный пример 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2013, 13:37 |
|
XML-проекция свойства в атрибут "value"
|
|||
---|---|---|---|
#18+
kolesov Стандартно для всех св-в - никак. Нестандартно - нужно ковырять системный класс %Compiler.XML.Generator.Adaptor , но это - жесть. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2013, 18:12 |
|
XML-проекция свойства в атрибут "value"
|
|||
---|---|---|---|
#18+
servitkolesovПо умолчанию каше проецирует объект в тег видаНе совсем понятно, что подразумевается под SalesId : имя класса, простого свойства или отношения, поэтому выбирайте сами: Извиняюсь за опечатку - конечно же свойство а не весь объект проецируется в узел. Спасибо. Пробую разбираться. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2013, 03:01 |
|
XML-проекция свойства в атрибут "value"
|
|||
---|---|---|---|
#18+
Всем спасибо. Опыт оказался неудачным. Собственно, задумка была в том, чтобы описать такую структуру данных, в которую бы спроецировался внешний XML, построенный на value-атрибутах узлов. Типа ЭТРАН WS... <freightWeightStdGross value="1227"/> <freightWeightStdNet value="1227"/> <freightRealWeight value="27000"/> <freightDangerSignID value="1"/> ... Сейчас мы это парсим через XPATH что не совсем удобно - узлов бывает больше сотни с вложенностями. Я так понимаю, что дешевле будет вначале весь этот XML преобразовать к <node>value</node> виду, а затем уже с ним работать через проекцию. Но все равно спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2013, 02:10 |
|
XML-проекция свойства в атрибут "value"
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2013, 15:26 |
|
|
start [/forum/topic.php?fid=39&msg=38509316&tid=1556989]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 283ms |
total: | 447ms |
0 / 0 |