2016-12-14 3 views
3

Frage Update auf XML: im sehr leid, wenn meine FrageWie Namespace hinzufügen Linq xml

hier nicht klar ist, ist der Code im Augenblick

XDocument doc = XDocument.Parse(framedoc.ToString()); 
foreach (var node in doc.Descendants("document").ToList()) 
{ 
    XNamespace ns = "xsi"; 
    node.SetAttributeValue(ns + "schema", ""); 
    node.Name = "alto"; 
} 

und hier ist der Ausgang

mit
<alto p1:schema="" xmlns:p1="xsi"> 

mein Ziel ist es, wie dies

xsi:schemaLocation="" 

woher kommen die p1 und xmlns:p1="xsi"?

+2

Mögliches Duplikat von [XElement-Namespaces (Vorgehensweise?]] (Http: // s tackoverflow.com/questions/4985974/xelement-namespaces-how-to) – CSharpie

+0

@CSharpie gucke die aktualisierte Frage, warum gibt es mir falsche Ausgabe? danke –

+0

Welches Bit dieser Ausgabe ist "falsch"? Markieren Sie die Frage in der Frage und brechen Sie die Ausgabe idealerweise in mehrere Zeilen auf, um das Lesen zu erleichtern. (Wenn Sie dies vereinfachen könnten, um die Bits zu reduzieren, würde das auch helfen.) –

Antwort

3

Wenn Sie

XNamespace ns = "xsi"; 

schreiben, die eine XNamespace mit einem URI nur "xsi" ist zu schaffen. Das ist nicht was du willst. Sie möchten einen Namespace Alias ​​ von xsi ... mit dem entsprechenden URI über ein xmlns Attribut. Sie wollen also:

XDocument doc = XDocument.Parse(framedoc.ToString()); 
foreach (var node in doc.Descendants("document").ToList()) 
{ 
    XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance"; 
    node.SetAttributeValue(XNamespace.Xmnls + "xsi", ns.NamespaceName); 
    node.SetAttributeValue(ns + "schema", ""); 
    node.Name = "alto"; 
} 

Oder besser, stellen Sie einfach den Alias ​​auf das Wurzelelement:

XDocument doc = XDocument.Parse(framedoc.ToString()); 
XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance"; 
doc.Root.SetAttributeValue(XNamespace.Xmlns + "xsi", ns.NamespaceName); 
foreach (var node in doc.Descendants("document").ToList()) 
{ 
    node.SetAttributeValue(ns + "schema", ""); 
    node.Name = "alto"; 
} 

Beispiel die Erstellung eines Dokuments:

using System; 
using System.Xml.Linq; 

public class Test 
{ 
    static void Main() 
    { 
     XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance"; 
     XDocument doc = new XDocument(
      new XElement("root", 
       new XAttribute(XNamespace.Xmlns + "xsi", ns.NamespaceName), 
       new XElement("element1", new XAttribute(ns + "schema", "s1")), 
       new XElement("element2", new XAttribute(ns + "schema", "s2")) 
      )       
     ); 
     Console.WriteLine(doc); 
    } 
} 

Ausgang:

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <element1 xsi:schema="s1" /> 
    <element2 xsi:schema="s2" /> 
</root>