Javascript 为每个循环计算XSL中的元素数?
在过去的一天中,我一直在尝试找出如何计算XSL中每个循环的元素数。我尝试过使用javascript,但似乎无法让它正常工作。我不确定这是否只是一个不能正确显示输出的问题,或者是否可以使用XSLT来实现这一点。任何帮助都将不胜感激。这是一个我没有准备好的讨厌的错误Javascript 为每个循环计算XSL中的元素数?,javascript,xslt,Javascript,Xslt,在过去的一天中,我一直在尝试找出如何计算XSL中每个循环的元素数。我尝试过使用javascript,但似乎无法让它正常工作。我不确定这是否只是一个不能正确显示输出的问题,或者是否可以使用XSLT来实现这一点。任何帮助都将不胜感激。这是一个我没有准备好的讨厌的错误 <script type="text/javascript"> var colATotal=0; function loopCounterA(){ colATotal++; } function printA(){
<script type="text/javascript">
var colATotal=0;
function loopCounterA(){
colATotal++;
}
function printA(){
document.write(colATotal);
}
</script>
<xsl:for-each select='bookmarks/category'>
<xsl:for-each select='./bookmark'>
<script type="text/javascript">
loopCounterA();
printA();
</script>
</xsl:for-each>
</xsl:for-each>
var colATotal=0;
函数a(){
阴道液++;
}
函数printA(){
文件编写(COLATOAL);
}
a();
printA();
来自评论:
我想显示所有的代码可能是
浪费时间。我有一个div columnA
和一个div columnB,两者都是
立柱。我的老板想要所有的东西
书签需要包装,但我不能
在中间开始包装
类别块。我的意图是
要做到这一点,请跟踪3个变量:
到目前为止,A列中的书签总数(A),
到目前为止,B列中的书签总数(B),
和中的书签数量
要放置的下一个类别块(C)。
如果B+C大于A,我将
将块放入columnA中,我将
否则,请将其放入B列。做
这现在更有意义了吗?太多了
在
select
属性的谓词上使用count()
XPath函数。在select
属性的谓词上使用count()
XPath函数。您可以使用count()
函数并使用它简化JavaScript。不需要迭代XML来生成JavaScript,JavaScript被调用n次以生成计数
<script type="text/javascript">
var colATotal=<xsl:value-of select='count(bookmarks/category/bookmark)'>;
function printA(){
document.write(colATotal);
}
printA();
</script>
阴道向量=;
函数printA(){
文件编写(COLATOAL);
}
printA();
如果将其放入JavaScript的目的只是将其转换为具有计数的HTML,而您只是使用JavaScript来创建所需的HTML(但不知道如何在XSLT中执行),请尝试询问如何在XSLT中执行此操作
这并不像你想象的那么难,只是做得和你习惯的不一样。XSLT是一种声明式编程风格,您可以作为过程式程序员来使用它
您可以只选择元素的计数,并将其直接放入HTML输出中,例如:
<b>The total count of bookmarks is:</b> <xsl:value-of select='count(bookmarks/category/bookmark)'>
书签总数为:
您可以使用count()
函数简化JavaScript。不需要迭代XML来生成JavaScript,JavaScript被调用n次以生成计数
<script type="text/javascript">
var colATotal=<xsl:value-of select='count(bookmarks/category/bookmark)'>;
function printA(){
document.write(colATotal);
}
printA();
</script>
阴道向量=;
函数printA(){
文件编写(COLATOAL);
}
printA();
如果将其放入JavaScript的目的只是将其转换为具有计数的HTML,而您只是使用JavaScript来创建所需的HTML(但不知道如何在XSLT中执行),请尝试询问如何在XSLT中执行此操作
这并不像你想象的那么难,只是做得和你习惯的不一样。XSLT是一种声明式编程风格,您可以作为过程式程序员来使用它
您可以只选择元素的计数,并将其直接放入HTML输出中,例如:
<b>The total count of bookmarks is:</b> <xsl:value-of select='count(bookmarks/category/bookmark)'>
书签总数为:
此样式表(您的算法):
通过此输入:
<bookmarks>
<category id="a">
<bookmark id="1"/>
<bookmark id="2"/>
<bookmark id="3"/>
</category>
<category id="b">
<bookmark id="4"/>
<bookmark id="5"/>
</category>
<category id="c">
<bookmark id="6"/>
<bookmark id="7"/>
<bookmark id="8"/>
<bookmark id="9"/>
<bookmark id="10"/>
</category>
<category id="d">
<bookmark id="11"/>
<bookmark id="12"/>
<bookmark id="13"/>
<bookmark id="14"/>
<bookmark id="15"/>
</category>
</bookmarks>
输出:
<html>
<div id="ColumnA">
<category id="a">
<bookmark id="1"></bookmark>
<bookmark id="2"></bookmark>
<bookmark id="3"></bookmark>
</category>
<category id="c">
<bookmark id="6"></bookmark>
<bookmark id="7"></bookmark>
<bookmark id="8"></bookmark>
<bookmark id="9"></bookmark>
<bookmark id="10"></bookmark>
</category>
</div>
<div id="ColumnB">
<category id="b">
<bookmark id="4"></bookmark>
<bookmark id="5"></bookmark>
</category>
<category id="d">
<bookmark id="11"></bookmark>
<bookmark id="12"></bookmark>
<bookmark id="13"></bookmark>
<bookmark id="14"></bookmark>
<bookmark id="15"></bookmark>
</category>
</div>
</html>
此样式表(您的算法):
通过此输入:
<bookmarks>
<category id="a">
<bookmark id="1"/>
<bookmark id="2"/>
<bookmark id="3"/>
</category>
<category id="b">
<bookmark id="4"/>
<bookmark id="5"/>
</category>
<category id="c">
<bookmark id="6"/>
<bookmark id="7"/>
<bookmark id="8"/>
<bookmark id="9"/>
<bookmark id="10"/>
</category>
<category id="d">
<bookmark id="11"/>
<bookmark id="12"/>
<bookmark id="13"/>
<bookmark id="14"/>
<bookmark id="15"/>
</category>
</bookmarks>
输出:
<html>
<div id="ColumnA">
<category id="a">
<bookmark id="1"></bookmark>
<bookmark id="2"></bookmark>
<bookmark id="3"></bookmark>
</category>
<category id="c">
<bookmark id="6"></bookmark>
<bookmark id="7"></bookmark>
<bookmark id="8"></bookmark>
<bookmark id="9"></bookmark>
<bookmark id="10"></bookmark>
</category>
</div>
<div id="ColumnB">
<category id="b">
<bookmark id="4"></bookmark>
<bookmark id="5"></bookmark>
</category>
<category id="d">
<bookmark id="11"></bookmark>
<bookmark id="12"></bookmark>
<bookmark id="13"></bookmark>
<bookmark id="14"></bookmark>
<bookmark id="15"></bookmark>
</category>
</div>
</html>
您是否只需要将类别元素的数量乘以类别元素的数量?有更好的方法来实现这一点(我想到了count
函数)。不,我将类别块放在两列中,为了尽可能均匀地放置它们,我希望跟踪已经放置在两列中的书签数量,并将该数量与下一个要放置的块中的书签数量进行比较,如果你知道我的意思……我会尝试将[position()mod 2==0]wither作为谓词或测试条件,将列表拆分为两个bucket,使偶数“行”进入一列,“奇数”行进入另一列。如果您需要一种不同类型的拆分,我仍然会关注于count()和position()的简单数学如何告诉您如何进行拆分。在您展示的代码中,不清楚您打算做什么-使用XSLT生成JS或在XSLT中实际运行JS。后者就是不符合设计。显示一段原始XML树和一段较长的代码片段