从XSLT中的根节点中选择值

时间:2013-02-19 12:00:23

标签: xml xslt

我有一个XSL变量prdxml,它包含这样的XML

    <node id="2939" parentID="2938" level="3" writerID="0" >
  <data alias="itemNumbers">,3101056,8261247,</data>
  <data alias="pass_word">akspass</data>
  <data alias="logo">/media/41532/inner-logo01.png</data> 
</node>

如何从此变量

中选择位于根节点中的id(id =“2939”)

2 个答案:

答案 0 :(得分:2)

我猜你使用的是XSLT 1.0。

为了做类似的事情你必须依赖扩展函数node-set()。但是因为它是一个扩展函数,它的可用性取决于你正在使用的XSLT处理器。

例如,在xsltproc,saxon中你可以使用类似的东西:

<xsl:stylesheet xmlns:exsl="http://exslt.org/common"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

    <xsl:variable name="_prdxml">
        <node id="2939" parentID="2938" level="3" writerID="0" >
            <data alias="itemNumbers">,3101056,8261247,</data>
            <data alias="pass_word">akspass</data>
            <data alias="logo">/media/41532/inner-logo01.png</data> 
        </node>
    </xsl:variable>

    <xsl:template match="/">
        <xsl:variable name="prdxml" select="exsl:node-set($_prdxml)" />
        <!-- Now you can navigate through the prdxml node set -->
        <xsl:apply-templates select="$prdxml/node[@id = '2939']" />
    </xsl:template>

</xsl:stylesheet>

如果您使用的是Microsoft XSLT Processor,则必须将扩展功能的名称空间更改为

xmlns:msxsl="urn:schemas-microsoft-com:xslt"

答案 1 :(得分:2)

这看起来像Umbraco节点的XML结构(v4.5之前版本)。

要访问Umbraco节点上的任何属性,您可以使用@符号,如下所示:

<xsl:value-of select="$prdxml/@id" />
<xsl:value-of select="$prdxml/@parentID" />

要访问您在Umbraco节点上定义的属性,您将使用以下内容:

<xsl:value-of select="$prdxml/data[@alias='pass_word']" />    
<xsl:value-of select="$prdxml/data[@alias='logo']" />

Umbraco在他们的维基上有一整节; http://our.umbraco.org/wiki/reference/xslt;以及如何使用XPATH遍历XML的示例。



- 编辑以解决评论 -

我的XSLT的工作版本是:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxml="urn:schemas-microsoft-com:xslt"
    xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" 
    exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets">

<xsl:output method="html" omit-xml-declaration="yes"/>

<xsl:param name="currentPage"/>

<xsl:template match="/">
    Current Page ID : <xsl:value-of select="$currentPage/@id" />
</xsl:template>

</xsl:stylesheet>

可能无法在您的网页上显示的原因可能是:

  • <xsl:param name="currentPage" />已从您的XSLT中删除。
  • XSLT未绑定到宏。
  • 宏未在模板上展示。
  • 模板未分配给您的节点。
  • 节点尚未发布。