我需要获得所有VERS(0和1):
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<LIB xmlns:p1="http://www.w3.org/2001/XMLSchema-instance">
<BOOK bnumber="1">
<CHAPTER cnumber="1">
<VERS vnumber="1">0</VERS>
<VERS vnumber="2">1</VERS>
</CHAPTER>
</BOOK>
</LIB>
我tried使用此XSL模板:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="LIB">
<xsl:for-each select="BOOK">
<xsl:for-each select="CHAPTER">
<xsl:value-of select="VERS"/>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
但只获得了第一个VERS(0)。
我怎么能for-each
?基于vnumber
存在,但如何?
如果你用简单的英语知道一个好的来源,我愿意学习。
答案 0 :(得分:2)
你使用的基本上只有一个let val = parseFloat(inputString.value.replace(")", "").substring(4, 20));
output.innerHTML = Math.log(val);
太少了。有多个for-each
es,所以你需要迭代这些。
VERS
但是,如果正确使用XPath,这些都可以折叠成一个<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="LIB">
<xsl:for-each select="BOOK">
<xsl:for-each select="CHAPTER">
<xsl:for-each select="VERS[@vnumber]">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
。
以下是如何迭代具有for-each
属性的所有VERS
es:
vnumber
旁注:我认为你应该研究如何在XSLT中使用模板。假设您确实想要对LIB,BOOK和CHAPTER执行某些操作,那么模板就是这样做的方式,而不是像上面第一个示例中那样具有深度嵌套的金字塔。
答案 1 :(得分:0)
在XSLT 1.0中,xsl:value-of
指令仅返回所选节点集中第一个节点的字符串值。
尝试改为:
<xsl:template match="/">
<xsl:for-each select="LIB/BOOK/CHAPTER/VERS">
<xsl:value-of select="." />
</xsl:for-each>
</xsl:template>
您没有发布预期结果,因此我不确定您希望如何分隔返回的值。