2013-04-17 3 views
0

Можно ли сохранить все узлы содержимого в виде массива и перейти к другому шаблону? Я пробовал, но не могу заставить его работать. Мое выражение выбора выбирает правильные узлы.Хранение узлов в массиве

<xsl:variable name="array" select="/data/contents/content[ ..... ] /> 
    <xsl:value-of select="$array/.../... " /> 


    <xsl:variable name="bannerList" select="data/contents[$dayOfWeekIndex]/content[position() &lt;= 5]" /> 

    <xsl:apply-templates select="$bannerList" mode="article"> 
     <xsl:with-param name="numberOfBanners" select="count($bannerList)" /> 
    </xsl:apply-templates> 

Я бы хотел использовать шаблон вызова и отправить в качестве параметра параметр bannerList.

+0

А может быть, вы так любезны предоставить нам пример того, что у вас есть до сих пор? – JLRishe

+0

Да, вы можете передать набор узлов как параметр, как и любую другую переменную: ''. Где ваш XSLT, где это не работает, как вы ожидаете? – JLRishe

+0

Я получил счет ($ bannerList) = 1, как я и ожидал. Но когда я пытаюсь получить доступ к чему-либо внутри другого шаблона select = "$ bannerList /.../@ somthing", я получаю пустой результат. – pethel

ответ

1

Да, это легко доступен, имеет вид:

XML:

<body> 
    <RIAssetType><text>Product</text></RIAssetType> 
    <RIAssetType><text>Service</text></RIAssetType> 
    <RIAssetType><text>Company/Business Unit</text></RIAssetType> 
    <RIAssetType><text>Technology</text></RIAssetType> 
    <RIAssetType><text>Intellectual Property/Data Only</text></RIAssetType> 
</body> 

XSLT:

<?xml version='1.0' ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="body"> 
    <copyBody> 
    <xsl:call-template name="childCopy"> 
     <xsl:with-param name="bodyChild" select="self::body/child::*"/> 
    </xsl:call-template> 
    </copyBody> 
    </xsl:template> 

    <xsl:template name="childCopy"> 
    <xsl:param name="bodyChild"/> 
    <xsl:for-each select="$bodyChild/self::*"> 
     <xsl:copy> 
     <xsl:copy-of select="."/> 
     </xsl:copy> 
    </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

ВЫВОД:

<copyBody> 
    <RIAssetType> 
    <RIAssetType> 
     <text>Product</text> 
    </RIAssetType> 
    </RIAssetType> 
    <RIAssetType> 
    <RIAssetType> 
     <text>Service</text> 
    </RIAssetType> 
    </RIAssetType> 
    <RIAssetType> 
    <RIAssetType> 
     <text>Company/Business Unit</text> 
    </RIAssetType> 
    </RIAssetType> 
    <RIAssetType> 
    <RIAssetType> 
     <text>Technology</text> 
    </RIAssetType> 
    </RIAssetType> 
    <RIAssetType> 
    <RIAssetType> 
     <text>Intellectual Property/Data Only</text> 
    </RIAssetType> 
    </RIAssetType> 
</copyBody> 

Кажется, у вас есть структура в XPATH где-нибудь, пожалуйста, проверьте еще раз.

Смежные вопросы