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>
Mögliches Duplikat von [XElement-Namespaces (Vorgehensweise?]] (Http: // s tackoverflow.com/questions/4985974/xelement-namespaces-how-to) – CSharpie
@CSharpie gucke die aktualisierte Frage, warum gibt es mir falsche Ausgabe? danke –
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.) –