Den*_*nis 5 c# xmldocument xml-namespaces
我有以以下开头的 XHTML 文件:
<html xmlns="http://www.w3.org/1999/xhtml">
Run Code Online (Sandbox Code Playgroud)
我加载它:
XmlDocument xml = new XmlDocument();
StringReader sr = new StringReader(html);
XmlTextReader xmltr = new XmlTextReader(sr);
xmltr.Namespaces = false;
xml.Load(xmltr);
Run Code Online (Sandbox Code Playgroud)
当我打电话时,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");
Run Code Online (Sandbox Code Playgroud)
据猜测,您尝试解析的页面最近已更改为 XHTML,因此命名空间?
根据@JonSkeet,您不应该xmltr.Namespaces = false;在 XmlTextReader 上设置
你可以
xmlns="http://www.w3.org/1999/xhtml") 命名空间。xpath例如local-name(),它将忽略命名空间:* xml.SelectSingleNode("/*[local-name()='html']/*[local-name()='body']")
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,您的代码都需要更改以适应命名空间,除非您在加载 XML 之前将命名空间从 XML 中删除。
*您还可以使用 // ,local-name()但要小心包含大量元素的文档 - 这可能会变得非常慢。