XSL 转换:计数元素
XSL Transformation: Count Elements
我需要检测第一个 title 元素并在第一个 title 元素之前打印出一个特殊注释。
<xsl:template match="title[string-length(.) > 0]" mode="content">
<xsl:comment>%title id="<xsl:value-of select="."/>"%</xsl:comment>
</xsl:template>
我可以检测到这些标题元素,但我需要做什么才能在第一个标题元素之前计算并获得此特殊评论?
编辑:
感谢您的评论,但不幸的是我无法让它工作。所以另外我在这里添加了 XML 来源,也许有人可以指出我优雅的解决方案?
<body id="EL_bodyN10001"><text id="EL_textN10001"><page id="EL_pageN10004"><p id="EL_pN10006"></p><p id="EL_pN10012">lorem ipsum dolor sit</p><p id="EL_pN10045">msdfsdkfh sdfsfksd sfsdfsdfsdfdsfh <strong id="EL_strongN1004C">LOREM IPSUM</strong>. lorem aklsjd asda sdasjdlkjaksld</p>
<title id="EL_titleN10001">my first title here</title>
<subheading id="EL_subheadingN1006E" level="1">MY FIRST SUBHEADING</subheading><p id="EL_pN10075">sdfjlksjfsjdf sfsjfljsdf sfklöskdfö sdfölksföksölf sdfksfk</p><p id="EL_pN10084">tzputozu lultpülupützu tultlutzulztu wewe rrtrt.</p><title id="EL_titleN10001">my second title</title><subheading id="EL_subheadingN100D9" level="1">THIS IS MY SECONT SUBHEADING</subheading><p id="EL_pN100E0">this is another senseless paragraph test.</p></page></text></body>
尝试
<xsl:template match="title[string-length(.) > 0][1]" mode="content">
<xsl:comment>XXX FIRST %title id="<xsl:value-of select="."/>"%</xsl:comment>
</xsl:template>
然后用其他内容编写第二个模板match="title[string-length(.) > 0][position() > 1]"
。
最终解决方案使用:
<xsl:variable name="subHeadingPos" select="count(./preceding-sibling::subheading)+1"/>
谢谢你们,伙计们
我需要检测第一个 title 元素并在第一个 title 元素之前打印出一个特殊注释。
<xsl:template match="title[string-length(.) > 0]" mode="content">
<xsl:comment>%title id="<xsl:value-of select="."/>"%</xsl:comment>
</xsl:template>
我可以检测到这些标题元素,但我需要做什么才能在第一个标题元素之前计算并获得此特殊评论?
编辑: 感谢您的评论,但不幸的是我无法让它工作。所以另外我在这里添加了 XML 来源,也许有人可以指出我优雅的解决方案?
<body id="EL_bodyN10001"><text id="EL_textN10001"><page id="EL_pageN10004"><p id="EL_pN10006"></p><p id="EL_pN10012">lorem ipsum dolor sit</p><p id="EL_pN10045">msdfsdkfh sdfsfksd sfsdfsdfsdfdsfh <strong id="EL_strongN1004C">LOREM IPSUM</strong>. lorem aklsjd asda sdasjdlkjaksld</p>
<title id="EL_titleN10001">my first title here</title>
<subheading id="EL_subheadingN1006E" level="1">MY FIRST SUBHEADING</subheading><p id="EL_pN10075">sdfjlksjfsjdf sfsjfljsdf sfklöskdfö sdfölksföksölf sdfksfk</p><p id="EL_pN10084">tzputozu lultpülupützu tultlutzulztu wewe rrtrt.</p><title id="EL_titleN10001">my second title</title><subheading id="EL_subheadingN100D9" level="1">THIS IS MY SECONT SUBHEADING</subheading><p id="EL_pN100E0">this is another senseless paragraph test.</p></page></text></body>
尝试
<xsl:template match="title[string-length(.) > 0][1]" mode="content">
<xsl:comment>XXX FIRST %title id="<xsl:value-of select="."/>"%</xsl:comment>
</xsl:template>
然后用其他内容编写第二个模板match="title[string-length(.) > 0][position() > 1]"
。
最终解决方案使用:
<xsl:variable name="subHeadingPos" select="count(./preceding-sibling::subheading)+1"/>
谢谢你们,伙计们