0

prdxmlこのようなXMLを保持するXSL変数があります

    <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 Processor を使用している場合は、拡張関数の名前空間を次のように変更する必要があります。

xmlns:msxsl="urn:schemas-microsoft-com:xslt"
于 2013-02-19T12:25:21.063 に答える
2

これは、Umbraco ノード (v4.5 より前) の XML 構造のように見えます。

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 に答える