2011-01-04 3 views
1

Привет Я пытаюсь выполнить итерацию по каждому узлу в xml, будь то узел элемента, текстовый узел или комментарий. С приведенным ниже XSL в самом первом заявлении печатает полный xml. Как скопировать самый первый узел в $ узлах и вызвать узлы процесса шаблона, снова удалив первый узел в моей следующей итерации?Итерации через каждый узел в XML

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

<xsl:template match="/"> 
<xsl:call-template name="process-nodes"> 
<xsl:with-param name="nodes" select="//node()" as="node()*"/> 
</xsl:call-template> 
</xsl:template> 

<xsl:template name="process-nodes"> 
<xsl:param name="nodes" as="node()*" /> 
<xsl:copy-of select="$nodes[1]"/> 
<xsl:if test="$nodes"> 
    <xsl:call-template name="process-nodes"> 
     <xsl:with-param name="nodes" 
     select="remove($nodes, 1)" /> 
    </xsl:call-template> 
</xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

Примечание: Я ищу для фиксации проблемы в этом виде реализации, а не менять матч шаблона для <xsl:template match="@* | node()"> как мне нужно, чтобы иметь некоторую обработку, которая требует такого подхода.

Спасибо.

+1

@Rachel: этот вопрос должен быть пересмотрен таким образом, чтобы он фокусировался на аргументе набора узлов, потому что пример таблицы стилей имеет такой стиль анти-XSLT, что люди реорганизуют вашу таблицу стилей перед ответом на ваш вопрос. –

+0

@Alejandro, полностью. – Flack

+0

@ Rachel: Вы не указали * никаких убедительных доказательств того, почему вы не можете использовать преобразование идентичности или просто переопределять/производные от него. Постарайтесь узнать что-то новое, иначе вы теряете много как разработчика и человека. –

ответ

2

Не совсем ясно, что вы пытаетесь выполнить, но преобразование идентичности обрабатывает каждый узел (всех типов) и каждый атрибут.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes"/> 

<xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

Вы можете исключить атрибуты, удалив @* часть выражения.

+0

+1 за хороший ответ, –

1

Это должно сделать это в рекурсивном вызове:

<xsl:with-param name="nodes" select="$nodes[position()!=1]" /> 
1

Из комментариев ОП:

Когда я обрабатывать любой текстовый узел, мне нужно сумму предыдущего текста узлы. Пытаясь найти, как я могу achive его без избыточно с помощью функции предшествующих-текст длина

Здесь идет функциональное программирование и высшие порядки-функция (HOF), как реализуемые FXSL библиотек:

Вот полный свод example.This преобразование конкатенации текстовых узлов документа XML только до определенного предела общей длины:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:foldl-func="foldl-func" 
xmlns:f="http://fxsl.sf.net/" 
exclude-result-prefixes="f foldl-func" 
> 

    <xsl:import href="../f/func-foldl.xsl"/> 

    <xsl:output method="text"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="/"> 
     <xsl:variable name="vinitParam" select="100,0,''"/> 

     <xsl:value-of select="f:foldl(f:limitedConcat(), $vinitParam, //text())"/> 
    </xsl:template> 

<xsl:function name="f:limitedConcat"> 
    <xsl:param name="pAccumResults"/> 
    <xsl:param name="pcurrentNode" as="text()"/> 

    <xsl:variable name="vLengthLimit" select="$pAccumResults[1]"/> 
    <xsl:variable name="vAccumLength" select="$pAccumResults[2]"/> 

    <xsl:sequence select= 
    "for $vNewLength in $vAccumLength+string-length($pcurrentNode), 
     $vInLimit in ($vNewLength le $vLengthLimit) 
    return 
     ($vLengthLimit, 
     (if($vInLimit) 
      then $vNewLength 
      else $vAccumLength) , 

     if($vInLimit) 
      then concat($pAccumResults[3], $pcurrentNode) 
      else $pAccumResults[3] 
     ) 
    "/> 
</xsl:function> 

<xsl:function name="f:limitedConcat" as="element()"> 
    <f:limitedConcat/> 
</xsl:function> 

<xsl:template match="f:limitedConcat" mode="f:FXSL"> 
    <xsl:param name="arg1"/> 
    <xsl:param name="arg2"/> 

    <xsl:sequence select="f:limitedConcat($arg1,$arg2)"/> 
</xsl:template> 
</xsl:stylesheet> 

При нанесении на этот XML-документ:

<booklist> 
    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

    <book> 
     <title>Angela's Ashes</title> 
     <author>Frank McCourt</author> 
     <publisher>HarperCollins</publisher> 
     <isbn>0 00 649840 X</isbn> 
     <price>6.99</price> 
     <sales>235</sales> 
    </book> 
    <book> 
     <title>Sword of Honour</title> 
     <author>Evelyn Waugh</author> 
     <publisher>Penguin Books</publisher> 
     <isbn>0 14 018967 X</isbn> 
     <price>12.99</price> 
     <sales>12</sales> 
    </book> 

</booklist> 

разыскиваемый, правильный результат получается:

100 100 Angela's AshesFrank McCourtHarperCollins0 00 649840 X6.99235Sword of HonourEvelyn WaughPenguin Books 

Пояснение:

Это похоже на:

f:foldl(f:add(), 0, 1 to 10) 

приведенное выше выражение вычисляет сумму чисел от 1 до 10:

  • Функция f:add() передается в качестве первого параметра f:foldl().

  • Вторым параметром является начальная накопленное значение - 0.

  • Третий параметр представляет собой последовательность элементов, подлежащих обработке.

Функция foldl принимает текущее накопленное значение и текущий глава последовательности (глава 3-го аргумента) и применяет функцию f:add() на них. Результатом становится новое накопленное значение, и foldl() вызывает себя рекурсивно с тем же самым первым аргументом, новым накопленным значением и хвостом последовательности.

В решении выше накопленное значение представляет собой триплекс, состоящий из предела длины текста, накопленной длины и суммарной конкатенации строк.

Вместо f:add() мы используем f:limitedConcat(), который добавляет как длину строки, так и объединяет значение текущего текстового узла, если общее значение не будет превышать указанный общий текст-предел.

+0

Замечательный !! Будет запущен в Saxon Transformer и обновит вас. – Rachel

+0

@ Рейчел: Добро пожаловать. Я буду рад помочь вам в адаптации этого к вашим целям. Пожалуйста, рассмотрите вопрос о голосовании/принятии ответа :) –

0

В вашем вопросе есть противоречие. Вы говорите:

С приведенным ниже XSL в самом первом выражении печатается полный xml.

, что означает, что вы недовольны тем, что обработка первого узла копирует весь XML.

Тогда вы говорите:

Как скопировать самый первый узел в $ узлах

но первый узел в $ узлах является корнем дерева, и копирование будет копировать весь XML.

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

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