Lecture dans une chaîne XML avec des espaces de noms à utiliser dans une transformation XSL

StackOverflow https://stackoverflow.com/questions/121309

  •  02-07-2019
  •  | 
  •  

Question

Sur un site Web ASP.NET 2.0, j'ai une chaîne représentant du code XML bien formé. Je crée actuellement un objet XmlDocument avec lui et j'exécute une transformation XSL pour l'afficher dans un formulaire Web. Tout fonctionnait correctement jusqu'à ce que l'entrée XML commence à contenir des espaces de noms.

Comment puis-je lire cette chaîne et autoriser les espaces de noms?

J'ai inclus le code actuel ci-dessous. La source de chaîne provient d’un noeud encodé HTML dans un flux RSS WordPress.

XPathNavigator myNav= myPost.CreateNavigator();
XmlNamespaceManager myManager = new XmlNamespaceManager(myNav.NameTable);
myManager.AddNamespace("content", "http://purl.org/rss/1.0/modules/content/");
string myPost = HttpUtility.HtmlDecode("<post>" +
    myNav.SelectSingleNode("//item[1]/content:encoded", myManager).InnerXml +
    "</post>");
XmlDocument myDocument = new XmlDocument();
myDocument.LoadXml(myPost.ToString());

L'erreur est sur la dernière ligne:

" System.Xml.XmlException: 'w' est un espace de noms non déclaré. Ligne 12, position 201. System.Xml.XmlTextReaderImpl.Throw (Exception e) ... "

Était-ce utile?

La solution

Gut feel - l'un des espaces de noms déclaré dans // contenu: l'encodage est supprimé (probablement parce que vous utilisez la propriété littérale .InnerXml)

À quoi correspond l'espace de nom "w" dans le DOM myNav? Vous voudrez ajouter xmlns: w = à votre noeud de publication. Il y en aura probablement d'autres aussi.

Autres conseils

Votre code semble correct.

Le problème provient probablement du document XML que vous essayez de charger. Il doit comporter des éléments avec un "w". préfixe, sans avoir ce préfixe déclaré dans le document XML

Par exemple, vous devriez avoir:

<test xmlns:w="http://...">
  <w:elementInWNamespace />
</test>

(votre document manque probablement du xmlns: w = "http: //" )

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