none
Poner CDATA al crear XML en el Nodo indicado RRS feed

  • Pregunta

  • Hola

    Trabajo con vb.net he convertido una clase a travez de un XSD, el problema que tengo es que no puedo crear un nodo

    Dim note = New NoteType()
            note.languageLocaleID = "1000"
            note.Value = ""
            invoice.Note = note

    Me da error en note => El valor de tipo NoteType no se puede convertir en NoteType()

    Este es el tipo NoteType

    '''<remarks/>
        <System.Xml.Serialization.XmlElementAttribute("Note", [Namespace]:="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2")>
        Public Property Note() As NoteType()
            Get
                Return Me.noteField
            End Get
            Set
                Me.noteField = value
            End Set
        End Property

    Haciendo prueba he logrado poner el CDATA cargando el archivo

    Dim doc As New XmlDocument()
            doc.Load("D:\XSD\Stack\factura.xml")
            Dim cdata As XmlCDataSection
            cdata = doc.CreateCDataSection("CIENTO  OCHENTA Y  CINCO CON 00/100")
            Dim root As XmlElement = doc.DocumentElement
            root.AppendChild(cdata)
            doc.Save("D:\XSD\Stack\factura.xml")

    ¿Al parecer la única forma de poner el CDATA es cargando el archivo?, ¿Hay alguna manera de poner el CDATA cuando estoy creando el archivo XML?

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    jueves, 15 de abril de 2021 3:38

Respuestas

  • Dim numbers = New Integer() {1, 2, 4, 8} 

    [...] Dim note = new NoteType() es un array de NoteType así como el array de lineas arriba de integer.

    No, no son iguales. El problema es que NoteType es una clase, con lo que New NoteType() lo interpreta como una llamada al constructor en lugar de una declaración de array. Y tampoco puede inferir que quieres un array mirando la declaración de tipo, porque has usado un tipo implícito diciendo solo "Dim" sin poner el tipo.

    Primera opción:

    Dim note As NoteType(1)

    Segunda opción

    Dim note(1) As NoteType

    Tercera opción:

    Dim note = New NoteType() { note1 } 'Siendo note1 el NoteType que quieres meter en el array.

    Nota: Mi VB está "oxidado" porque usualmente programo en C#, así que se me ha podido escapar algún pequeño detallito en alguna de las opciones anteriores.


    jueves, 15 de abril de 2021 18:09

Todas las respuestas

  • Fíjate en esta declaración de Note:

    Public Property Note() As NoteType()

    La parte importante en la que te tienes que fijar es los dos paréntesis que hay detrás de la palabra Note. Eso indica que la propiedad es un array de NoteType. Te sale un error porque estás intentando meter un único notetype en donde se espera un array de notetypes.

    Desde luego, puedes crear un array que contenga un único elemento, y luego asignar eso a la propiedad. No te confundas, un array que contiene un único elemento no es lo mismo que un único elemento no contenido en un array. Desde el punto de vista de los datos que contiene puede que te dé lo mismo, pero al compilador no le da igual, desde su punto de vista son tipos de dato distintos.

    jueves, 15 de abril de 2021 6:06
  • Hola Pedro,

    ¿Alguna novedad sobre la consulta realizada?

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    jueves, 15 de abril de 2021 14:00
    Moderador
  • Hola @Alberto

    Estas son todas las propiedades que tiene ese Array

    Partial Public Class TextType
        
        Private languageIDField As String => Este campo no lo necesito no piden en el XML
        
        Private languageLocaleIDField As String
        
        Private valueField As String
        
        '''<remarks/>
        <System.Xml.Serialization.XmlAttributeAttribute(DataType:="language")>  _
        Public Property languageID() As String
            Get
                Return Me.languageIDField
            End Get
            Set
                Me.languageIDField = value
            End Set
        End Property
        
        '''<remarks/>
        <System.Xml.Serialization.XmlAttributeAttribute(DataType:="normalizedString")>  _
        Public Property languageLocaleID() As String
            Get
                Return Me.languageLocaleIDField
            End Get
            Set
                Me.languageLocaleIDField = value
            End Set
        End Property
        
        '''<remarks/>
        <System.Xml.Serialization.XmlTextAttribute()>  _
        Public Property Value() As String
            Get
                Return Me.valueField
            End Get
            Set
                Me.valueField = value
            End Set
        End Property
    End Class

    Como debería de ingresar los datos note(1) = valor1, note(2) = valor2

    Le estoy asignando los datos de la siguiente manera:

    Dim cdata As XCData = <![CDATA[CIENTO  OCHENTA Y  CINCO CON 00/100]]>
    
    
            Dim note = New NoteType()
            note.languageLocaleID = "1000"
            note.Value = 'Acá tengo que poner el CDATA
            invoice.Note = note

    El primer problema no se como trabajar con ese array es el único que me da problemas te muestro uno de los que no he tenido problemas

    Dim invoiceTypeCode = New InvoiceTypeCodeType()
            invoiceTypeCode.listID = "0101"
            invoiceTypeCode.listAgencyName = "PE:SUNAT"
            invoiceTypeCode.listName = "Tipo de Documento"
            invoiceTypeCode.listURI = "urn:pe:gob:sunat:cpe:see:gem:catalogos:catalogo01"
            invoiceTypeCode.Value = "01"
            invoice.InvoiceTypeCode = invoiceTypeCode

    El segundo problema es que no se como poner un CDATA cuando estoy creando el XML

    He probado el siguiente código en el cual cargo el xml y como no tengo nodo creado lo pongo al final del xml en el aire

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Dim doc As New XmlDocument()
            doc.Load("D:\XSD\Stack\factura.xml")
            Dim cdata As XmlCDataSection
            cdata = doc.CreateCDataSection("CIENTO  OCHENTA Y  CINCO CON 00/100")
            Dim root As XmlElement = doc.DocumentElement
            root.AppendChild(cdata)
            doc.Save("D:\XSD\Stack\factura.xml")
        End Sub

    Pero la idea principal es ir poniendo el CDATA cuando voy construyendo el XML porque son como 8 CDATA que tengo que poner

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    jueves, 15 de abril de 2021 14:28
  • Estas son todas las propiedades que tiene ese Array

    Creo que te has liado. Esto no tiene nada que ver. El problema no está en el contenido, sino en el sitio donde lo guardas. Concretamente en esta línea:

    invoice.Note = note

    Ahí, invoice.Note es un array de NoteType. Pero note no es un array, es un único NoteType. Para resolverlo, primero tienes que instanciar un array de notetypes. Después meter note en la posición cero del array. Y después guardar el array en invoice.Note.

    En cuanto a lo que haces para guardar el cdata en el XML (que es un tema completamente aparte y no tiene nada que ver con lo de meter un elemento en un array), en principio lo veo bien tal como lo tienes, salvo que veo que metes el cdata en la raiz del documento así:

    root.AppendChild(cdata)

    y esto me sorprende porque lo normal es que el cdata vaya metido dentro de algún elemento, no en el root. A lo mejor viendo un ejemplo de cómo tiene que quedar el archivo XML nos hacemos una idea mejor de qué es lo que falta.

    jueves, 15 de abril de 2021 15:59
  • Hola @Alberto

    Debe de quedar así

    <?xml version="1.0" encoding="iso-8859-1"?>
    <Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ccts="urn:un:unece:uncefact:documentation:2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:sac="urn:sunat:names:specification:ubl:peru:schema:xsd:SunatAggregateComponents-1" xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    	<ext:UBLExtensions>
    		<ext:UBLExtension>
    			<ext:ExtensionContent><Signature Id="SignatureUnoSoft" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>AhNPTfI0PF13vKQjfJQ0Cwp6rSg=</DigestValue></Reference></SignedInfo><SignatureValue>oyLc2WdJXqw/XO80uzcE9m3hgsVvymUfyuGjvjSRmp1KJIMHuJjLBgVcEnO6+oI6cGK28YtSzPgGIFD6a3waNplS9udZjI86iI0PmdtNmPdt9sv2XdWoNKEp1Y3GM3duHy4mZ46i/JqY50brMNPJApNJ3bM1xXu1py0bZfKX5bEukU9CPTPlh9fNYXSlEFFtsDcgsWOe9Rz5EQfGh9Pek1ibfpWMvGqBGiXjKsRpSUcEQhDGfjMmPpqLqtTvt5TaM5y5cQibivZghwRvppk3WX02eU7wSgdDN3GIQqh/s+cK5TDtiMZwCmi1fg1h1ZV3k70QQxLL/lXwA3ZwSAw7Zg==</SignatureValue><KeyInfo><X509Data><X509SubjectName>C=PE, O=SEGURIDAD ELECTRONICA MARRUY S.A.C., OID.2.5.4.97=20603893558, OU=Issued by AC CAMERFIRMA PERÚ SAC ER [PE1], OU=GERENCIA, T=GERENTE GENERAL, S=LIMA - LIMA, L=LIMA, SERIALNUMBER=DNI:70275849, SN=MARCHENA RUIZ, G=YULY MEDALID, CN=YULY MEDALID MARCHENA RUIZ, E=innovassoft@gmail.com</X509SubjectName><X509Certificate>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</X509Certificate></X509Data></KeyInfo></Signature></ext:ExtensionContent>
    		</ext:UBLExtension>
    	</ext:UBLExtensions>
    	<cbc:UBLVersionID>2.1</cbc:UBLVersionID>
    	<cbc:CustomizationID>2.0</cbc:CustomizationID>
    	<cbc:ProfileID schemeName="SUNAT:Identificador de Tipo de Operación" schemeAgencyName="PE:SUNAT" schemeURI="urn:pe:gob:sunat:cpe:see:gem:catalogos:catalogo51">0101</cbc:ProfileID>
    	<cbc:ID>F001-009478</cbc:ID>
    	<cbc:IssueDate>2021-03-20</cbc:IssueDate>
    	<cbc:IssueTime>15:43:19</cbc:IssueTime>
    	<cbc:DueDate>2021-03-20</cbc:DueDate>
    	<cbc:InvoiceTypeCode listID="0101" listAgencyName="PE:SUNAT" listName="Tipo de Documento" listURI="urn:pe:gob:sunat:cpe:see:gem:catalogos:catalogo01">01</cbc:InvoiceTypeCode>
    	<cbc:Note languageLocaleID="1000"><![CDATA[CIENTO  OCHENTA Y  CINCO CON 00/100]]></cbc:Note>
    	<cbc:DocumentCurrencyCode listID="ISO 4217 Alpha" listName="Currency" listAgencyName="United Nations Economic Commission for Europe">PEN</cbc:DocumentCurrencyCode>
    	<cbc:LineCountNumeric>2</cbc:LineCountNumeric>
    	<cac:OrderReference>
    		<cbc:ID><![CDATA[-]]></cbc:ID>
    		<cbc:SalesOrderID><![CDATA[0000009477]]></cbc:SalesOrderID>
    	</cac:OrderReference>

    Pero necesito crear el CDATA asi como te mostre instanciando propiedades y pasandole los valores y cuando hay un CDATA ponerle en el nodo indicado.


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    jueves, 15 de abril de 2021 16:05
  • Pero, lo quieres crear a través del XmlDocument o lo quieres crear serializando la clase que generaste con el xsd?

    Si lo quieres hacer con el XmlDocument, entonces tal como yo decía en la respuesta anterior los tres CDATA que tienes en el fichero van colgados de elementos, no del root. Primero tienes que crear o encontrar el elemento contenedor, y entonces añades el CDATA colgándolo de ese elemento en lugar de colgándolo de root. Salvo esta diferencia, el código que mostraste debería valerte. Pero ojo, si quieres buscar el elemento con XPath te vas a encontrar con la dificultad de que este documento XML usa namespaces, que son una auténtica pesadez de manejar a través de un XmlDocument.

    Si lo haces a partir del XSD, en principio bastaría que asignes las propiedades de la clase y la serialices, si es que el XSD ha generado correctamente una propiedad para el CData dentro de la clase. La verdad es que nunca lo he probado; todos los XML que he serializado de esta manera siempte han tenido únicamente elementos y atributos, nunca he serializado ninguno que tuviese un CData.

    jueves, 15 de abril de 2021 16:25
  • Hola @Alberto

    >Pero, lo quieres crear a través del XmlDocument o lo quieres crear serializando la clase que generaste con el xsd?

    Lo quiero crear a través de la clase que se genero por medio del XSD, pero tengo dos problemas que comente líneas arriba el tipo de dato de Note el cual no me deja crear el nodo donde va el CDATA y no se como ponerle el CDATA al nodo, utilizando la clase creada.

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    jueves, 15 de abril de 2021 16:37
  • Deleted
    jueves, 15 de abril de 2021 16:51
  • Hola

    No se como declarar una array con el tipo de dato NoteType() crei que lo había hecho pero no es así

    Dim numbers = New Integer() {1, 2, 4, 8} 

    Según la documentación Dim note = new NoteType() es un array de NoteType así como el array de lineas arriba de integer.

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    jueves, 15 de abril de 2021 16:56
  • Hola

    >Tu cdata es un value no un child. Es el contenido del elemento.

    He pensado lo mismo

    Dim title = New XElement("title", New XCData("CIENTO  OCHENTA Y  CINCO CON 00/100"))
    
            Dim note = New NoteType()
            note.languageLocaleID = "1000"
            note.Value = title
            invoice.Note = note(0)

    Quiero improvisar con ese código pero me falta solucionar la declaración del array del tipo NoteType()

    How to add <! [CDATA[ tag to exist XML file

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    jueves, 15 de abril de 2021 17:02
  • Hola Alberto

    Esto si funciona

    Dim title = New XElement("title", New XCData("CIENTO  OCHENTA Y  CINCO CON 00/100"))
            Dim contact As XElement =
              <contact>
                  <name><%= title %></name>
              </contact>
            Console.WriteLine(contact)
            Console.Read()

    Imagen


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    jueves, 15 de abril de 2021 17:49
  • Dim numbers = New Integer() {1, 2, 4, 8} 

    [...] Dim note = new NoteType() es un array de NoteType así como el array de lineas arriba de integer.

    No, no son iguales. El problema es que NoteType es una clase, con lo que New NoteType() lo interpreta como una llamada al constructor en lugar de una declaración de array. Y tampoco puede inferir que quieres un array mirando la declaración de tipo, porque has usado un tipo implícito diciendo solo "Dim" sin poner el tipo.

    Primera opción:

    Dim note As NoteType(1)

    Segunda opción

    Dim note(1) As NoteType

    Tercera opción:

    Dim note = New NoteType() { note1 } 'Siendo note1 el NoteType que quieres meter en el array.

    Nota: Mi VB está "oxidado" porque usualmente programo en C#, así que se me ha podido escapar algún pequeño detallito en alguna de las opciones anteriores.


    jueves, 15 de abril de 2021 18:09
  • Lo quiero crear a través de la clase que se genero por medio del XSD, pero tengo dos problemas que comente líneas arriba el tipo de dato de Note el cual no me deja crear el nodo donde va el CDATA y no se como ponerle el CDATA al nodo, utilizando la clase creada.

    No vas a poder. Una rápida búsqueda por la red revela esto: "You can't define a "CDATA type" via a schema because there is no such type. CDATA is just a convenience for creators of XML documents, and any text node which is produced using CDATA can also be produced without it.".

    Es decir, el CDATA no es un tipo de dato válido en el esquema XML, sino que es solo una comodidad cuando escribes el XML a mano para evitar tener que escribir los "escapes" para los caracteres especiales. Pero cuando serializas una clase, el serializador ya sabe meter los escapes, así que no genera un CDATA.

    jueves, 15 de abril de 2021 18:21
  • Hola

    Igual no logro declarar el bendito array y setearlo con los datos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    jueves, 15 de abril de 2021 21:03
  • Hola @Alberto

    Ya le pude ponerle los datos al array

    Dim note = New NoteType()
    note.languageLocaleID = "1000"
    note.Value = " "
    invoice.Note(0) = note

    Fue como me indicaste, :)


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    viernes, 16 de abril de 2021 23:18
  • Respuesta definitiva

    Dim note = New NoteType()
            Dim noteArray = New List(Of NoteType)
            note.languageLocaleID = "1000"
            note.Value = cdata.ToString()
            noteArray.Add(note)
            invoice.Note() = noteArray.ToArray()

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    sábado, 17 de abril de 2021 17:50