读取带有命名空间的XML字符串以用于XSL转换

时间:2020-03-06 14:36:07  来源:igfitidea点击:

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

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

我将下面的当前代码包括在内。字符串源来自WordPress RSS feed中的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'是未声明的名称空间。System.Xml.XmlTextReaderImpl.Throw(Exception e)的第12行,位置201. "

解决方案

代码看起来正确。

问题可能出在我们要加载的xml文档中。
它必须具有带有" w"前缀的元素,而XML文档中没有声明该前缀

例如,我们应该具有:

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

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

没感觉到// content:encoding中声明的名称空间之一被删除(可能是因为我们使用的是文字.InnerXml属性)

在myNav DOM中," w"命名空间的计算结果是什么?我们将要添加xmlns:w =到发布节点。可能还会有其他人。