[英]XPATH to count the occurrence of child nodes in ancestor
我需要計算<foreword><?>
元素<foreword><?>
<title>
節點的出現次數。 我的問題是<title>
元素的父節點有不同的名稱,但它們都有<title>
元素。
我嘗試使用count(*)
但這不起作用,它返回“0”。 如果我使用count(/doc/front/foreword/*/title)
它返回'16'。 如何計算<foreword><?>
元素中<title>
元素的出現次數?
<doc>
<front>
<lep></lep>
<verstat></verstat>
<contents></contents>
<illuslist></illuslist>
<tablelist></tablelist>
<foreword>
<para0><title>para0</title></para0>
<applicdef><title>applicdef</title></applicdef>
<applicdef><title>applicdef</title></applicdef>
<applicdef><title>applicdef</title></applicdef>
<applicdef><title>applicdef</title></applicdef>
<applicdef><title>applicdef</title></applicdef>
<para0><title>para0</title></para0>
<para0><title>para0</title></para0>
<para0><title>para0</title></para0>
<para0><title>para0</title></para0>
</foreword>
</front>
</doc>
我用應該顯示的數字對title
元素進行了編號(1.0 目的,2. 應用...等。
所以輸出會像
<para0><title>1. para0</title></para0>
<applicdef><title>2.applicdef</title></applicdef>
<applicdef><title>3.applicdef</title></applicdef>
<applicdef><title>4.applicdef</title></applicdef>
<applicdef><title>5.applicdef</title></applicdef>
<applicdef><title>6.applicdef</title></applicdef>
讓我們使用您的真實生活場景,即 XSLT。 這是使用身份轉換的解決方案。
輸入 XML
<?xml version="1.0"?>
<doc>
<front>
<lep></lep>
<verstat></verstat>
<contents></contents>
<illuslist></illuslist>
<tablelist></tablelist>
<foreword>
<para0>
<title>para0</title>
</para0>
<applicdef>
<title>applicdef</title>
</applicdef>
<applicdef>
<title>applicdef</title>
</applicdef>
<applicdef>
<title>applicdef</title>
</applicdef>
<applicdef>
<title>applicdef</title>
</applicdef>
<applicdef>
<title>applicdef</title>
</applicdef>
<para0>
<title>para0</title>
</para0>
<para0>
<title>para0</title>
</para0>
<para0>
<title>para0</title>
</para0>
<para0>
<title>para0</title>
</para0>
</foreword>
</front>
</doc>
XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="title">
<title>
<xsl:value-of select="concat(count(../preceding-sibling::*)+1,'. ', .)"/>
</title>
</xsl:template>
</xsl:stylesheet>
輸出
<doc>
<front>
<lep/>
<verstat/>
<contents/>
<illuslist/>
<tablelist/>
<foreword>
<para0>
<title>1. para0</title>
</para0>
<applicdef>
<title>2. applicdef</title>
</applicdef>
<applicdef>
<title>3. applicdef</title>
</applicdef>
<applicdef>
<title>4. applicdef</title>
</applicdef>
<applicdef>
<title>5. applicdef</title>
</applicdef>
<applicdef>
<title>6. applicdef</title>
</applicdef>
<para0>
<title>7. para0</title>
</para0>
<para0>
<title>8. para0</title>
</para0>
<para0>
<title>9. para0</title>
</para0>
<para0>
<title>10. para0</title>
</para0>
</foreword>
</front>
</doc>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.