Question

Je l'ai rencontré un problème dans lequel lorsque je crée un document XML en utilisant les classes de programmation System.XML puis utilisez la méthode Save XML de sortie n'utilise pas QNames pour les nœuds et juste utilise des noms locaux.

ex sortie désiré

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

Mais ce que je reçois actuellement est

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

Ceci est quelque peu simplifiée puisque tous les espaces de noms que je utilise sont entièrement définies en utilisant des attributs xmlns sur l'élément de document, mais je l'ai omis que pour plus de clarté ici.

Je suis conscient du fait que la classe XmlWriter peut être utilisé pour enregistrer un XmlDocument et que cela prend une classe XmlWriterSettings mais je ne pouvais pas voir comment configurer ce tel que je reçois plein de sortie QNames.

Était-ce utile?

La solution

Comme vous le dites, l'élément racine a besoin de la définition de l'espace de noms:

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

Le code ci-dessus pour le 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);

L'obligation de passer l'espace de noms uri comme argument aux méthodes createAttribute et CreateElement semble contre-intuitif, car il pourrait faire valoir que le document est capable de déduire cette information, mais bon, voilà comment cela fonctionne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top