0

我有一个 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")

4

2 回答 2

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 处理器,则必须将扩展函数的命名空间更改为

xmlns:msxsl="urn:schemas-microsoft-com:xslt"
于 2013-02-19T12:25:21.063 回答
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 在他们的 wiki 上有一个完整的部分。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 未绑定到宏。
  • 模板中没有宏。
  • 模板未分配给您的节点。
  • 节点尚未发布。
于 2013-02-19T12:26:17.647 回答