Domanda

ho incontrato un problema per cui quando creo un documento XML a livello di codice utilizzando le classi System.Xml e quindi utilizzare il metodo Save the output XML non usa QNames per i nodi e utilizza solo nomi locali.

esempio output desiderato

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

Ma quello che attualmente ottengo è

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

Questo è un po 'semplificata in quanto tutti gli spazi dei nomi che sto usando sono pienamente definita utilizzando xmlns attributi sull'elemento documento, ma ho omesso che per chiarezza qui.

Sono consapevole del fatto che la classe XmlWriter può essere utilizzato per salvare un XmlDocument e che questo richiede una classe XmlWriterSettings, ma non riuscivo a vedere come configurare questo in modo tale che ricevo uscita QNames completi.

È stato utile?

Soluzione

Come dici tu, l'elemento radice ha bisogno la definizione dello spazio dei nomi:

<?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>

Il codice per l'XML qui sopra:

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);

L'obbligo di passare l'URI dello spazio dei nomi come argomento ai metodi createAttribute e CreateElement sembra contro-intuitivo perché si potrebbe sostenere che il documento è in grado di derivare tali informazioni, ma hey, questo è come funziona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top