【问题标题】:issue with a xmlnsxmlns 的问题
【发布时间】:2010-05-19 10:53:36
【问题描述】:

我有一个 xml 文件和一个 xslt 文件。

xml 文件有一个 xmlns="exa:com.test" 属性。

如果我在 xml 中删除此属性,我的 xslt 中的 xpath 语句将起作用。但是如果我离开它,它就不起作用了。

我使用下面的代码来混合xml和xslt:

XslCompiledTransform transformer = new XslCompiledTransform();

transformer.Load(HttpContext.Current.Server.MapPath("xslt\\searchresults.xslt"));  

transformer.Transform(xmlreader, null, utf8stringwriter);

我做错了什么?如果xml顶部有xmlns属性,我怎么能混合xml和xslt?

【问题讨论】:

    标签: asp.net xml xslt xpath


    【解决方案1】:

    不带前缀名称的xmlns 属性替换默认命名空间,以便您的查询匹配具有不同(空)命名空间的节点。您需要在 XSLT XPath 查询中使用前缀命名空间(或 XmlNamespaceManager 用于独立的 XPath 查询),您的查询将再次按预期工作。

    在 XSLT 中:

    <xsl:stylesheet ... xmlns:exa="exa:com.test">
    

    然后,假设您曾经匹配例如 xyz,您现在更改查询如下:

    <xsl:template match="exa:xyz"> ...
    

    一般来说,您可能想阅读一些关于 XML 命名空间的文档。

    【讨论】:

    • 非常感谢。问候。何塞
    【解决方案2】:

    但应该注意的是,虽然命名空间字符串只是被视为一个精确的文字字符串,它被用作没有其他含义的标识符。字符串 必须 符合 IANA uri,这是为了保证命名空间的唯一性。一些解析器拒绝解析不符合的命名空间。

    还要注意,因为它们是字符串 http://www.w3.org/1999/xhtml 和例如 http://w3.org/1999/xhtml/ 用于命名空间的目的是完全不同的命名空间。

    您可能想了解 XML 中的命名空间是如何工作的。 exa:com.test 据我所知不是一个有效的命名空间字符串。

    【讨论】:

      猜你喜欢
      • 2012-08-16
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      相关资源
      最近更新 更多