Frage

Ich habe ein Problem aufgetreten, wodurch, wenn ich ein XML-Dokument erstellen programmatisch die System.Xml-Klassen und dann die Save-Methode verwenden, die XML-Ausgabe verwendet nicht QNames für die Knoten und verwendet nur lokale Namen.

Beispiel Gewünschte Ausgabe

<ex:root>
  <ex:something attr:name="value">
</ex:root>

Aber was ich zur Zeit bekommen, ist

<root>
  <something name="value">
</root>

Dies ist etwas vereinfacht, da alle Namespaces Ich verwende vollständig definiert werden xmlns mit auf dem Dokument Elementattribute, aber ich habe für Klarheit hier, dass weggelassen.

Ich bin mir bewusst, dass die XmlWriter-Klasse verwendet werden kann, ein XmlDocument zu speichern und dass dies eine XmlWriterSettings Klasse nimmt, aber ich konnte nicht sehen, wie diese so konfigurieren, dass ich voll QNames Ausganges.

War es hilfreich?

Lösung

Wie Sie sagen, muss das Root-Element der Namespace-Definition:

<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
    xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">
    <iis:WebSite Id="asdf" />
</Wix>

Der Code für die oben xml:

XmlDocument document = new XmlDocument();
document.AppendChild(document.CreateXmlDeclaration("1.0", null, null));
XmlNode rootNode = document.CreateElement("Wix", "http://schemas.microsoft.com/wix/2006/wi");
XmlAttribute attr = document.CreateAttribute("xmlns:iis", "http://www.w3.org/2000/xmlns/");
attr.Value = "http://schemas.microsoft.com/wix/IIsExtension";
rootNode.Attributes.Append(attr);
rootNode.AppendChild(document.CreateElement("iis:WebSite", "http://schemas.microsoft.com/wix/IIsExtension"));
document.AppendChild(rootNode);

Die Anforderung, den NamespaceURI als Argument an die Create und Create Methoden erscheint unlogisch zu übergeben, da könnte man argumentieren, dass das Dokument, dass die Informationen abzuleiten fähig ist, aber hey, das ist, wie es funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top