2009-11-25 3 views
3

J'ai un fichier xml comme suit:changement d'espace de noms xml

<?xml version="1.0" encoding="utf-8"?> 
<ABC version="1" xmlns="urn:Company"> 
</ABC> 

Je publie la version 2 et l'espace de noms changé en "NewCompany". Comment mettez-vous à jour l'espace de noms?

J'ai essayé

XmlDocument xmlDocument = new XmlDocument(); en utilisant (XmlReader xmlReader = XmlReader.Create ("myfile.xml")) { xmlDocument.Load (xmlReader); }

 XmlNodeList nodeList = xmlDocument.GetElementsByTagName("ABC"); 
     if (nodeList.Count == 1) 
     { 
      XmlElement element = nodeList.Item(0) as XmlElement; 
      if (element != null) 
      { 
       element.SetAttribute("xmlns", "NewCompany"); 

       XmlWriterSettings settings = new XmlWriterSettings(); 
       settings.Indent = true; 
       using (XmlWriter writer = XmlWriter.Create("myfile.xml", settings)) 
       { 
        xmlDocument.WriteTo(writer); 
       } 
      } 
     } 

Mais je reçois « Le préfixe « » ne peut pas être redéfini à partir à l'intérieur de la même étiquette d'élément de départ. » exception

Répondre

0

Je suis tombé sur ceci aujourd'hui et ai trouvé une solution de contournement. Si vous utilisez XmlTextWriter au lieu de XmlWriter, le problème disparaît. Votre exemple de code ressemblerait à quelque chose comme ceci:

XmlNodeList nodeList = xmlDocument.GetElementsByTagName("ABC"); 
    if (nodeList.Count == 1) 
    { 
     XmlElement element = nodeList.Item(0) as XmlElement; 
     if (element != null) 
     { 
      element.SetAttribute("xmlns", "NewCompany"); 

      using (XmlTextWriter writer = new XmlTextWriter("myfile.xml", Encoding.UTF8)) 
      { 
       writer.Formatting = Formatting.Indented; 
       xmlDocument.WriteTo(writer); 
      } 
     } 
    } 

je l'aurais imaginé que XmlWriter.Create simplement revenir un XmlTextWriter, mais cela ne semble pas être le cas. De regarder autour dans Reflector, XmlWriter.Create semble retourner les types concrets différents de XmlTextWriter.

XmlTextWriter semble prendre en charge la modification de l'espace de nom de l'élément de document, contrairement à l'éditeur renvoyé par XmlWriter.Create. Je me rends compte que cette question a quatre ans, mais peut-être que ma réponse aidera quelqu'un.

Questions connexes