Порядок атрибутов узла X-документа Openedge 10.2 - PullRequest
0 голосов
/ 07 января 2020

Есть ли способ в OE установить порядок для атрибутов узла?

Мне нужен этот результат:

<MyNode MyNode="aaa" Attribute1="bbb" Attribute2="ccc" Attribute3="ddd"/>

Я использую этот код:

hDoc:CREATE-NODE(hAttribute, "MyNode", "ELEMENT").
hAttribute:SET-ATTRIBUTE("MyNode", "aaa").
hAttribute:SET-ATTRIBUTE("Attribute1", "bbb").
hAttribute:SET-ATTRIBUTE("Attribute2", "ccc").
hAttribute:SET-ATTRIBUTE("Attribute3", "ddd").
hNode:APPEND-CHILD(hAttribute).

но он продолжает создавать этот испорченный вывод:

<MyNode Attribute1="bbb" MyNode="aaa" Attribute2="ccc" Attribute3="ddd"/>

Или это из-за того, что имя узла и имя атрибута совпадают? Но должен быть способ поставить этот атрибут name-name на первое место ... Спасибо за помощь!

1 Ответ

1 голос
/ 07 января 2020

Порядок атрибутов XML незначителен (https://www.w3.org/TR/2008/REC-xml-20081126/#sec -starttags )

Обратите внимание, что порядок спецификаций атрибутов в стартовом теге или пустом элементе тег не имеет значения.

Используя парсер DOM, вы не можете контролировать порядок - см. https://knowledgebase.progress.com/articles/Article/000034225

Если вы используете SAX-WRITER - поскольку он потоковый - вы управляете порядком:

def var lcc as longchar no-undo.
def var hsax as handle no-undo.

create sax-writer hsax.
hsax:set-output-destination( "longchar", lcc ).
hsax:formatted = true.
hsax:start-document().
hsax:start-element( "MyNode" ).
hsax:insert-attribute( "MyNode", "aaa" ).
hsax:insert-attribute( "Attribute1", "bbb" ).
hsax:insert-attribute( "Attribute2", "ccc" ).
hsax:insert-attribute( "Attribute3", "ddd" ).
hsax:end-element( "MyNode" ).
hsax:end-document().

message "sax" skip string( lcc ) skip view-as alert-box.

см. https://abldojo.services.progress.com: 443 / # /? shareId = 5e1484014b1a0f40c34b8c1f для обоих

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...