Pregunta
Flávio Lúcio Na... · Nov 30, 2021

¿Cómo exportar una clase a xml sin namespace?

¡Hola a todos!

Estoy intentando exportar una clase a xml y quitar la etiqueta "xmlns" de la clase madre. Estas son mis clases para crear el XML.

Class Class.Test Extends (%RegisteredObject, %XML.Adaptor)
{ 

Parameter NAMESPACE = "http://mynamespace.com/test"; 
Property Person As Class.Person; Property Address As Class.Address; 

}
Class Class.Person Extends (%RegisteredObject, %XML.Adaptor)
{ 

Parameter NAMESPACE = "http://mynamespace.com/test"; 
Property name As %String; Property age As %String; 

}
Class Class.Address Extends (%RegisteredObject, %XML.Adaptor)
{ 

Parameter NAMESPACE = "http://mynamespace.com/test"; 
Property location As %String; 

}

Esta es mi función para exportar el XML.

set writer=##class(%XML.Writer).%New()
set writer.Indent=1
set writer.Charset="ISO-8859-1"
set status=writer.OutputToString()
set status=writer.RootObject(objectTest)
set xml=writer.GetXMLString()

Este es el xml que se generó:

<?xml version="1.0" encoding="ISO-8859-1"?>
<Test xmlns="http://mynamespace.com/test">
  <Person>
    <name>John</name>
    <age>22</age>
  </Person>
  <Address>
    <location>New York NY 10036</location>
  </Address>
</Test>

Cuando elimino el parámetro NAMESPACE desde la Clase.Test pasa esto con mi xml.

<?xml version="1.0" encoding="ISO-8859-1"?>
<Test>
  <Person xmlns:s01="http://mynamespace.com/test">
    <s01:name>1</s01:name>
  </Person>
  <ResultadoCultura xmlns:s01="http://mynamespace.com/test">
    <s01:location>New York NY 10036</s01:location>
  </ResultadoCultura>
</Test>

¿Alguien me podría ayudar? Quiero crear este XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<Test>
  <Person>
    <name>John</name>
    <age>22</age>
  </Person>
  <Address>
    <location>New York NY 10036</location>
  </Address>
</Test>

Un saludo.

0
0 91
Debate (2)2
Inicie sesión o regístrese para continuar

Como ya extiendes de %XML.Adaptor, directamente pueden utilizarse las funcionalidades de esa clase para obtener el XML, por ejemplo: 

do objectTest.XMLExportToString(.xml)
write xml

que ya te generará:

<Test><Person><name>John</name><age>22</age></Person><Address><location>New York NY 10036</location></Address></Test>

A lo mejor dejando vacío el parámetro namespace (en todas las clases). Si no tiene significado para ti, digo.

El parámetro es opcional. Si no lo informas, no aparece.

PD: La opción de @Jose Tomas Salvador es buena pero omite la etiqueta xml de inicio.

<?xml version="1.0" encoding="ISO-8859-1"?>