代码之家  ›  专栏  ›  技术社区  ›  Mattio

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

  •  1
  • Mattio  · 技术社区  · 16 年前

    在ASP.NET 2.0网站中,我有一个字符串表示一些格式良好的XML。我目前正在用它创建一个XMLDocument对象,并运行一个XSL转换以在Web窗体中显示。在XML输入开始包含命名空间之前,所有操作都正常。

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

    我已经包含了下面的当前代码。字符串源来自WordPressRSS提要中的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处(异常E)…”

    2 回复  |  直到 12 年前
        1
  •  0
  •   stephbu    16 年前

    感觉-删除了//content:encoding中声明的命名空间之一(可能是因为您使用的是literal.innerxml属性)

    mynav dom中的“w”名称空间的计算结果是什么?您需要将xmlns:w=添加到您的post节点。可能还会有其他人。

        2
  •  1
  •   Matthew Murdoch    12 年前

    你的代码看起来不错。

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

    例如,您应该有:

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

    (您的文档可能丢失了 xmlns:w="http://" )