我有我的xml,这样我只想在其他子节点不为空或空值时获取标记名和segnum,当其他段为空时我不想在输出中留空。
获取我在for-each中使用的标记名,并获取我使用的segnum“count(前置:: head)+ 1”,但是我不知道如何排除空白标记
<myxml>
<a>
<head>
<tagname></tagname>
<segnum></segnum>
</head>
<fs>axl</fs>
<es>hoot</es>
</a>
<b>
<head>
<tagname></tagname>
<segnum></segnum>
</head>
<zz>suger</zz>
<sd>mint</sd>
</b>
<b>
<head>
<tagname></tagname>
</head>
<zz></zz>
<sd></sd>
<gs></gs>
</b>
<g>
<head>
<tagname></tagname>
<segnum></segnum>
</head>
<gz></gz>
<gd></gd>
<gs></gs>
</g>
</myxml>
required output:
<myxml>
<a>
<head>
<tagname>a</tagname>
<segnum>1</segnum>
</head>
<fs>axl</fs>
<es>hoot</es>
</a>
<b>
<head>
<tagname>b</tagname>
<segnum>2</segnum>
</head>
<zz>suger</zz>
<sd>mint</sd>
</b>
<b>
<head>
<tagname></tagname>
<segnum></segnum>
</head>
<zz></zz>
<sd></sd>
<gs></gs>
</b>
<g>
<head>
<tagname></tagname>
<segnum></segnum>
</head>
<gz></gz>
<gd></gd>
<gs></gs>
</g>
</myxml>
此致
答案 0 :(得分:0)
您可以首先让模板仅匹配 head 元素,而其他子元素不是空白
<xsl:template match="head[following-sibling::*/text()]">
然后,您可以通过使用 xsl:number 进行计数
来计算前面 head 元素的数量<xsl:variable name="count">
<xsl:number count="head[following-sibling::*/text()]" level="any" />
</xsl:variable>
然后您可以在标记名元素中输出,如下所示:
<tagname><xsl:number value="$count" format="a" /></tagname>
这是完整的XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="head[following-sibling::*/text()]">
<xsl:variable name="count">
<xsl:number count="head[following-sibling::*/text()]" level="any" />
</xsl:variable>
<head>
<tagname><xsl:number value="$count" format="a" /></tagname>
<segnum><xsl:number value="$count" /></segnum>
</head>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于XML时,输出以下内容
<myxml>
<a>
<head>
<tagname>a</tagname>
<segnum>1</segnum>
</head>
<fs>axl</fs>
<es>hoot</es>
</a>
<b>
<head>
<tagname>b</tagname>
<segnum>2</segnum>
</head>
<zz>suger</zz>
<sd>mint</sd>
</b>
<b>
<head>
<tagname/>
</head>
<zz/>
<sd/>
<gs/>
</b>
<g>
<head>
<tagname/>
<segnum/>
</head>
<gz/>
<gd/>
<gs/>
</g>
</myxml>