读取带有命名空间的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 =到发布节点。可能还会有其他人。