2011-03-01 32 views
5

actual formato de archivoLa adición de un prefijo a un nodo XML

<Folio> 
<Node1>Value1</Node1> 
<Node2>Value2</Node2> 
<Node3>Value3</Node3> 
</Folio> 

salida deseada

<vs:Folio> 
<vs:Node1>Value1</vs:Node1> 
<vs:Node2>Value2</vs:Node2> 
<vs:Node3>Value3</vs:Node3> 
</vs:Folio> 

estoy usando XmlElement y XmlDocument para agregar el prefijo al elemento nodo hijo y estoy incapaz de lograrlo Estaría muy agradecido si alguien pudiera darme el empuje correcto en la dirección correcta.

+1

Creo que eso significaría que los nodos linfáticos estaban en un espacio de nombres distinto del folio, pero no hay espacio de nombres por defecto o Schama atributos definidos entonces, ¿cuál es el punto? ¿Qué estás tratando de lograr al agregar el prefijo? – BenCr

+0

@benCr Espero que esto ayude. – Venki

+0

Lo siento pero no es así. ¿Estás recibiendo algún tipo de error? – BenCr

Respuesta

7

Si está intentando agregar espacio de nombres a los elementos después de cargar el documento xml, entonces no es posible.

De MSDN:

No se puede agregar, modificar o eliminar una definición de espacio de nombres XML en una instancia de un documento XML después de que el documento se ha cargado en el Document Object Model XML (XMLDOM) analizador Los nodos XML que se usan para representan datos en el documento XML son creados cuando el documento se carga en el analizador XMLDOM. Estos nodos están vinculados permanentemente a sus atributos de espacio de nombres XML cuando son creados. Por lo tanto, la declaración de espacio de nombres vacía de XML (xmlns = "") es anexada a los nodos secundarios de estos nodos para conservar el atributo predeterminado de espacio de nombres XML de estos nodos.

Sin embargo, puede cargar la entrada, leer cada elemento y escribirlo en otro documento (o en memoria) que tenga el espacio de nombres configurado. A continuación se muestra el código que analiza la cadena xml, crea un nuevo elemento xml junto con el prefijo del espacio de nombres y el espacio de nombres.

  String xmlWithoutNamespace = 
       @"<Folio><Node1>Value1</Node1><Node2>Value2</Node2><Node3>Value3</Node3></Folio>"; 
      String prefix ="vs"; 
      String testNamespace = "http://www.testnamespace/vs/"; 
      XmlDocument xmlDocument = new XmlDocument(); 

      XElement folio = XElement.Parse(xmlWithoutNamespace); 
      XmlElement folioNode = xmlDocument.CreateElement(prefix, folio.Name.LocalName, testNamespace); 

      var nodes = from node in folio.Elements() 
         select node; 

      foreach (XElement item in nodes) 
      { 
       var node = xmlDocument.CreateElement(prefix, item.Name.ToString(), testNamespace); 
       node.InnerText = item.Value; 
       folioNode.AppendChild(node); 
      } 

      xmlDocument.AppendChild(folioNode); 

xmlDocument ahora contiene el código XML con cada nodo con el prefijo vs

-1
private static void SetPrefix(string prefix, XmlNode node) 
    { 
     node.Prefix = prefix; 
     foreach (XmlNode n in node.ChildNodes) 
     { 
      //if (node.ParentNode != null) 
      //{ 
      if (n.Name.Contains("QualifyingProperties")) 
      { 
       break; 
      } 
      //} 
      SetPrefix(prefix, n); 
     } 
    } 
+3

Si bien esto puede responder técnicamente a la pregunta, no me gusta la idea de que algún código fuente arrojado sea una respuesta adecuada. ¿Podría explicar por favor * cómo * y * por qué * esto resuelve el problema de los PO? –

Cuestiones relacionadas