gpt4 book ai didi

c# - XmlDocument 忽略 xmlns

转载 作者:行者123 更新时间:2023-11-30 12:14:39 24 4
gpt4 key购买 nike

我的 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");

最佳答案

据推测,您尝试解析的页面最近已更改为 XHTML,因此 namespace 也已更改?

根据@JonSkeet,您不应在 XmlTextReader 上设置 xmltr.Namespaces = false;

你可以

  • 拥抱命名空间并使用 XmlNameSpaceManager管理 XHTML (xmlns="http://www.w3.org/1999/xhtml") 命名空间。
  • 使用与命名空间无关的 xpath,例如 local-name(),它将忽略命名空间:*

 xml.SelectSingleNode("/*[local-name()='html']/*[local-name()='body']")

无论哪种方式,您的代码都需要更改以适应命名空间,除非您在加载 XML 之前从 XML 中破解命名空间。

* 您也可以将//与 local-name() 一起使用,但要小心处理包含大量元素的文档 - 这可能会变得非常慢。

关于c# - XmlDocument 忽略 xmlns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9032493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com