Saltar al contenido

nombre del elemento xml con dos puntos

Nuestros investigadores estrellas agotaron sus depósitos de café, por su búsqueda diariamente por la resolución, hasta que Raquel halló el arreglo en GitLab así que en este momento la comparte aquí.

Solución:

Bien, aquí está.

XmlDocument.CreateElement("prefix", "name", "uri");

referencia aquí si ayuda a alguien más: http://msdn.microsoft.com/en-us/library/c22k3d47.aspx 1

Los dos puntos indican que esos elementos están en el espacio de nombres ns1. Esto es necesario cuando se utilizan varios esquemas. Asumiendo que el documento solo usa ns1, es esencialmente equivalente a no tener ningún “ns1:” en esas etiquetas. Consulte esta guía para obtener más información.

El documento XML que publicó en realidad no está bien formado, porque el ns2 abreviatura asignada a muchos de los elementos no está asociada con un espacio de nombres. Corregido, podría verse así:


  
    
      
        
       
    
  

El documento XML anterior es semánticamente equivalente a este:


  
    
      
        
      
    
  

Y a este:


  
    
      
        
      
    
  

En los tres casos, el E y B los elementos están en el schema espacio de nombres, mientras que el S, Vy Bl los elementos están en el my-namespace espacio de nombres

Los prefijos de espacio de nombres son útiles, pero estrictamente hablando, son innecesarios. Puede crear documentos XML, como el último ejemplo, que no usen prefijos y que declaren el espacio de nombres explícitamente para cada elemento.

Si, al procesar XML, cree que le importa lo que prefix un elemento dado está usando, es casi seguro que está equivocado. Lo único que le importa es a qué espacio de nombres pertenece. Por ejemplo, si cargo ningún de esos tres documentos en un XmlDocumentel siguiente código escribirá el elemento ‘Bl’:

    XmlNamespaceManager ns = new XmlNamespaceManager(d.NameTable);
    ns.AddNamespace("a", "schema");
    ns.AddNamespace("b", "my-namespace");
    Console.Write(d.SelectSingleNode("/a:E/a:B/b:S/b:V/b:Bl", ns).OuterXml);

Cuando tu dices:

No quiero que la salida tenga la referencia del esquema, pero necesito tener el prefix. El resultado que quiero lograr es simplemente .

es casi seguro que estás en un error. Un elemento cuya etiqueta es ns1:E no tiene sentido a menos que el ns1 prefix se asigna a un espacio de nombres, ya sea en ese elemento o en uno de sus ancestros. (Además, un espacio de nombres no es una referencia de esquema). Si usa

CreateElement("ns1", "E", "schema");

para crear el elemento y luego agregarlo a un elemento que ya ha declarado ns1 como siendo el prefix Para el schema espacio de nombres, entonces el DOM agregará el elemento sin la declaración del espacio de nombres, porque en ese contexto no es necesario. Si ns1 no está declarado (o se declara abreviando algún espacio de nombres que no sea schema), entonces el DOM pegará una declaración de espacio de nombres en el elemento, así como el prefix.

tl; dr: le importan los espacios de nombres, no los prefijos de espacios de nombres.

Recuerda difundir esta sección si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *