xslt和命名空间的问题

时间:2009-08-25 10:09:43

标签: xml xslt namespaces

我有一个像这样序列化的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的问题吗?

3 个答案:

答案 0 :(得分:2)

我建议:

<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>

请注意<xsl:text>元素。它们有助于保持XSL代码的清洁(在正确的缩进方面),同时确保可预测的输出格式。

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

答案 1 :(得分:1)

您必须将命名空间添加到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>

答案 2 :(得分:0)

尝试将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命名空间的更多信息