XmlDocument ignorer xmlns
J'ai XHTML fichier qui commence par:
<html xmlns="http://www.w3.org/1999/xhtml">
- Je le charger:
XmlDocument xml = new XmlDocument();
StringReader sr = new StringReader(html);
XmlTextReader xmltr = new XmlTextReader(sr);
xmltr.Namespaces = false;
xml.Load(xmltr);
Quand je l'appelle xml.InnerXml
j'ai toujours eu de The 'xmlns' attribute is bound to the reserved namespace 'http://www.w3.org/2000/xmlns/'.
exception et ne peut pas accéder intérieure xml de mon XmlDocument. Comment se débarrasser des xmlns au cours de la charge?
SOLUTION EST:
XmlNode xmln = xml.SelectSingleNode("//html");
if (xmln != null)
((XmlElement)xmln).RemoveAttribute("xmlns");
Votre XHTML déclaration parle
Oui, mon troisième partie XHTML a 1999 et à l'exception, dit-2000.
Le plus important est le "xhtml" vs "xmlns" peu...
Oui, et il ne fonctionne pas. Vous obtiendrez toujours des exception lorsque vous essayez de toucher ce nœud en aucune façon. Mais tout est bon pour tous les autres nœuds. Vous pouvez toujours obtenir tout intérieure nœud via XPath (comme je le fais). Comment résoudre ce problème?
Ok, j'ai juste reproduit le problème - et il s'en va, si vous vous débarrasser de la "espaces de noms = false". Pourquoi tu fais ça?
http://www.w3.org/1999/xhtml
mais l'erreur que vous avez décrit parle http://www.w3.org/2000/xmlns
- êtes-vous sûr qu'ils sont tous les deux corrects?Oui, mon troisième partie XHTML a 1999 et à l'exception, dit-2000.
Le plus important est le "xhtml" vs "xmlns" peu...
Oui, et il ne fonctionne pas. Vous obtiendrez toujours des exception lorsque vous essayez de toucher ce nœud en aucune façon. Mais tout est bon pour tous les autres nœuds. Vous pouvez toujours obtenir tout intérieure nœud via XPath (comme je le fais). Comment résoudre ce problème?
Ok, j'ai juste reproduit le problème - et il s'en va, si vous vous débarrasser de la "espaces de noms = false". Pourquoi tu fais ça?
OriginalL'auteur Denis | 2012-01-27
Vous devez vous connecter pour publier un commentaire.
À une supposition, la page que vous essayez d'analyser, a récemment changé de XHTML, donc les espaces de noms?
Comme par @JonSkeet, vous ne devriez pas régler
xmltr.Namespaces = false;
sur votre XmlTextReaderVous pouvez soit
xmlns="http://www.w3.org/1999/xhtml"
) de l'espace de noms.xpath
commelocal-name()
, qui ignore les noms:*
De toute façon, votre code a besoin de changer pour s'adapter aux espaces de noms, à moins que vous hack de l'espace de noms de XML avant de le charger.
*
Vous pouvez également utiliser /avec /local-name()
mais être prudent avec les documents avec un grand nombre d'éléments, ce qui peut devenir très lent.((XmlElement)xmln).RemoveAttribute("xmlns");
OriginalL'auteur StuartLC