【问题标题】:Read in an XML String with Namespaces for Use in an XSL Transformation读入带有命名空间的 XML 字符串以用于 XSL 转换
【发布时间】:2008-09-23 14:23:38
【问题描述】:

在一个 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) ..."

【问题讨论】:

    标签: c# asp.net xslt


    【解决方案1】:

    您的代码看起来不错。

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

    例如,您应该:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 你的直觉是正确的。看起来帖子是从 MS Word 复制和粘贴的,因此 HTML 包含具有“w”命名空间的属性,但没有嵌入声明。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多