我有XHTML文件,它以:
开头<html xmlns="http://www.w3.org/1999/xhtml">
我加载它:
XmlDocument xml = new XmlDocument();
StringReader sr = new StringReader(html);
XmlTextReader xmltr = new XmlTextReader(sr);
xmltr.Namespaces = false;
xml.Load(xmltr);
当我调用xml.InnerXml
时,我总是遇到The 'xmlns' attribute is bound to the reserved namespace 'http://www.w3.org/2000/xmlns/'.
异常,无法访问我的XmlDocument的内部xml。如何在加载期间摆脱xmlns?
解决方案是:
XmlNode xmln = xml.SelectSingleNode("//html");
if (xmln != null)
((XmlElement)xmln).RemoveAttribute("xmlns");
答案 0 :(得分:2)
猜测,您尝试解析的页面最近已更改为XHTML,因此命名空间?
根据@JonSkeet,你不应该在你的XmlTextReader上设置xmltr.Namespaces = false;
你可以
xmlns="http://www.w3.org/1999/xhtml"
)名称空间。xpath
,例如local-name()
,它将忽略命名空间:*
xml.SelectSingleNode("/*[local-name()='html']/*[local-name()='body']")
无论哪种方式,您的代码都需要更改以适应命名空间,除非您在加载之前将命名空间从XML中删除。
*
您也可以将//与local-name()
一起使用,但要注意包含大量元素的文档 - 这可能会变得非常慢。