2009-01-14 10 views
10

Nos dieron un documento de muestra, y necesitamos poder reproducir la estructura del documento exactamente para un proveedor. Sin embargo, estoy un poco perdido con la forma en que C# maneja los espacios de nombres. He aquí una muestra del documento:Creando un documento XML específico usando espacios de nombres en C#

<?xml version="1.0" encoding="UTF-8"?> 
<Doc1 xmlns="http://www.sample.com/file" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.sample.com/file/long/path.xsd"> 
    <header> 
     <stuff>data</stuff> 
     <morestuff>data</morestuff> 
    </header> 
</Doc1> 

Cómo lo general iría de esto es cargar un documento en blanco, y luego empezar a poblarlo:

XmlDocument doc = new XmlDocument(); 
doc.LoadXml("<Doc1></Doc1>"); 
// Add nodes here with insert, etc... 

Una vez que tengo el documento comenzó, cómo Cómo obtengo el espacio de nombres y el esquema en el elemento Doc1? Si comienzo con el espacio de nombre y el esquema en el elemento Doc1 incluyéndolos en LoadXml(), entonces todos de los elementos secundarios tienen el espacio de nombres en ellos, y eso es un no-no. El documento es rechazado

Así que en otras palabras, tengo que producirlo EXACTAMENTE como se muestra. (Y prefiero no solo escribir texto en un archivo en C# y espero que sea XML válido).

Respuesta

20

Usted debe tratar de esa manera

XmlDocument doc = new XmlDocument(); 

    XmlSchema schema = new XmlSchema(); 
    schema.Namespaces.Add("xmlns", "http://www.sample.com/file"); 

    doc.Schemas.Add(schema); 

No se olvide de incluir los siguientes espacios de nombres:

using System.Xml.Schema; 
using System.Xml; 
+2

+1 para especificar las instrucciones using para que el fragmento de código que realmente funciona! –

0

Si está utilizando Visual Studio 2008 en la carpeta Samples encontrará una muestra de agregue que le permite pegar un fragmento XML como código Linq2XML.

Scott Hanselman tiene un blog post con los detalles.

Creo que esta es la manera más rápida de pasar de un documento XML de muestra al código C# que lo crea.

+0

No .Net 3.0+ aquí todavía. Aún 2.0. –

4

Personalmente prefiero usar XmlElement común y sus atributos para declarar espacios de nombres. Sé que hay mejores formas, pero esta nunca falla.

intentar algo como esto:

xRootElement.SetAttribute("xmlns:xsi", "http://example.com/xmlns1"); 
+0

¿Qué es xRootElement? – Shrivallabh

+0

una instancia de XmlElement :) – mathifonseca

Cuestiones relacionadas