【问题标题】:problem with xslt and namespacesxslt 和命名空间的问题
【发布时间】:2009-08-25 10:09:42
【问题描述】:

我有一个像这样序列化的 C# 类:

<oadResults 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns="http://www.tyr.org.uk/standards"
>
  <Link>http://www.tyr.org.uk//290/Data.zip</Link>
  <ID>3540</ID>
</oadResults>

我有一个 XSLT 文件:

<xsl:stylesheet 
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
  <xsl:template match="/">
    ID <xsl:value-of select="ID"/>   </xsl:template>
</xsl:stylesheet>

转换不起作用,结果是:"ID"

但如果我从 XML 文件中删除 this

xmlns="http://www.tyr.org.uk/standards"

它工作正常,我得到_"ID:3540"

您能告诉我如何解决更改 XSL 文件而不是 XML 的问题吗?

【问题讨论】:

    标签: xml xslt namespaces


    【解决方案1】:

    我建议:

    <xsl:stylesheet 
      version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:tyr="http://www.tyr.org.uk/standards"
      exclude-result-prefixes="tyr"
    >
      <xsl:template match="/tyr:oadResults">
        <xsl:text>ID </xsl:text>
        <xsl:value-of select="tyr:ID"/>   
        <xsl:text>&#10;</xsl:text>
      </xsl:template>
    </xsl:stylesheet>
    

    注意&lt;xsl:text&gt; 元素。它们有助于保持 XSL 代码整洁(就正确缩进而言),同时确保可预测的输出格式。

    exclude-result-prefixes 阻止 tyr 命名空间声明出现在输出中。

    【讨论】:

      【解决方案2】:

      您必须将命名空间添加到您的 XSLT。

      <?xml version="1.0" encoding="UTF-8"?> 
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
              xmlns:t="http://www.tyr.org.uk/standards">
          <xsl:template match="/">
              ID <xsl:value-of select="t:ID"/>   
          </xsl:template>
      </xsl:stylesheet>
      

      【讨论】:

        【解决方案3】:

        尝试将xmlns="http://www.tyr.org.uk/standards" 添加到XSLT 文档的xsl:stylesheet 节点。

        <?xml version="1.0" encoding="UTF-8" ?>
        <xsl:stylesheet version="1.0" xmlns="http://www.tyr.org.uk/standards" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            <xsl:template match="/">
            ID <xsl:value-of select="ID"/>   </xsl:template>
        </xsl:stylesheet>
        

        或者,您可以在 XSLT 文档中给 http://www.tyr.org.uk/standards 命名空间一个别名,所以它看起来像这样:

        <?xml version="1.0" encoding="UTF-8" ?>
        <xsl:stylesheet version="1.0" xmlns:bob="http://www.tyr.org.uk/standards" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            <xsl:template match="/">
            ID <xsl:value-of select="bob:ID"/>   </xsl:template>
        </xsl:stylesheet>
        

        你可以在http://www.w3.org/TR/REC-xml-names/找到更多关于xml命名空间的信息

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-04-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-26
          • 2011-09-09
          • 1970-01-01
          相关资源
          最近更新 更多