OpenEdge Progress 4GL WRITE-XML NAMESPACE-PREFIX

Привет Прогресс OpenEdge Dev,

Я использую следующий синтаксис для создания файла XML из временной таблицы. Все хорошо, но для одного предмета.

dataset dsCust:write-xml("FILE", "c:/Test/Customer.xml", true).

Это мое объявление временной таблицы

def temp-table ttCustomer no-undo         
  namespace-uri "http://WMS.URI"
  namespace-prefix "ns0"
  field PurchaseOrderNumber       as char
  field Plant                     as char.

Это мой вывод

<ns0:GoodsReceipt xmlns:ns0="http://WMS.URI">
     <ns0:PurchaseOrderNumber/>
     <ns0:Plant>Rose</ns0:Plant>
</ns0:GoodsReceipt>

Но это мой желаемый выход

<ns0:GoodsReceipt xmlns:ns0="http://WMS.URI">
     <PurchaseOrderNumber/>
     <Plant>Rose</Plant>
</ns0:GoodsReceipt>

Обратите внимание, что элемент внутри узла GoodsReceipt не имеет префикса ns0. Можно ли это сделать с помощью write-xml? Я хочу по возможности избегать использования DOM или SAX.

Спасибо

2 ответа

Решение

Вы всегда можете вручную установить атрибуты и имена тегов, используя XML-NODE-TYPE а также SERIALIZE-NAME,

Тем не менее: я работал с множеством xml:s и API:s вместе с Progress OpenEdge и до сих пор не сработал из-за проблем с пространством имен, но я думаю, это может зависеть от того, что вы хотите делать с данными.

Поскольку вы не включаете весь набор данных, это что-то вроде предположения. Он производит более или менее то, что вы хотите для этого конкретного случая. Я не знаю, как несколько "квитанций" должны быть представлены, хотя, возможно, вам придется изменить это.

DEFINE TEMP-TABLE ttCustomer NO-UNDO SERIALIZE-NAME "ns0:GoodsReceipt"
    FIELD xmlns               AS CHARACTER SERIALIZE-NAME "xmlns:ns0" INITIAL "http://WMS.URI" XML-NODE-TYPE "ATTRIBUTE"
    FIELD PurchaseOrderNumber AS CHARACTER 
    FIELD Plant               AS CHARACTER .

DEFINE DATASET dsCust SERIALIZE-HIDDEN
    FOR ttCustomer .

CREATE ttCustomer.
ASSIGN Plant = "Rose".

DATASET dsCust:write-xml("FILE", "c:/temp/Customer.xml", TRUE).

Из краткого обзора Google по этому вопросу кажется, что W3C предлагает представлять префикс пространства имен так, как это делает OpenEdge: https://www.w3schools.com/xml/xml_namespaces.asp И я уверен, что вы можете ' измените поведение с write-xml так, как вы хотите. В документации не упоминается способ переопределения поведения. https://documentation.progress.com/output/ua/OpenEdge_latest/index.html

Другие вопросы по тегам