1

在一个 ASP.NET 2.0 网站中,我有一个代表一些格式良好的 XML 的字符串。我目前正在使用它创建一个 XmlDocument 对象并运行 XSL 转换以在 Web 表单中显示。在 XML 输入开始包含名称空间之前,一切都运行良好。

如何读取此字符串并允许命名空间?

我在下面包含了当前代码。字符串源来自 WordPress RSS 提要中的 HTML 编码节点。

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());

错误在最后一行:

“System.Xml.XmlException:'w' 是一个未声明的命名空间。第 12 行,位置 201。在 System.Xml.XmlTextReaderImpl.Throw(Exception e) ...”

4

2 回答 2

1

您的代码看起来正确。

问题可能出在您尝试加载的 xml 文档中。它必须具有带有“w”前缀的元素,而无需在 XML 文档中声明该前缀

例如,您应该有:

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

(您的文档可能缺少xmlns:w="http://"

于 2008-09-23T14:36:18.553 回答
0

直觉 - //content:encoding 中声明的命名空间之一被删除(可能是因为您使用的是文字 .InnerXml 属性)

myNav DOM 中的“w”命名空间是什么?您需要将 xmlns:w= 添加到您的 post 节点。可能还会有其他人。

于 2008-09-23T14:36:36.680 回答