我有大量的html文件,如下所示:
<html>
<head>
<title>t</title>
</head>
<body>
<div class="a">
<div class="b" type="t1">
b11<div class="x">x</div>
b12<div class="y">y</div>b13
</div>
<div class="c">c</div>
</div>
<div class="b" type="t2" region="r">b21
<div class="x">x</div>b22
<div class="y">y</div>
b23
</div>
</body>
</html>
目前,div class =“b”的文本在节点的开头,中间和末尾被分段。 我想合并div class =“b”的文本,以便它出现在开头。 我想要获取的文件如下:
<html>
<head>
<title>t</title>
</head>
<body>
<div class="a">
<div class="b" type="t1">b11 b12 b13
<div class="x">x</div>
<div class="y">y</div>
</div>
<div class="c">c</div>
</div>
<div class="b" type="t2" region="r">b21 b22 b23
<div class="x">x</div>
<div class="y">y</div>
</div>
</body>
</html>
我运行以下bash脚本a.sh:
xsltproc a.xslt a.html > b.html
其中a.xslt如下:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//div[@class='b']">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
<xsl:for-each select="text()">
<xsl:if test="position() > 1"><xsl:text> </xsl:text></xsl:if>
<xsl:value-of select="normalize-space(.)"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
不幸的是我的输出不是我想要的:
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<title>t</title>
</head>
<body>
<div class="a">
<div class="b" type="t1">b11
<div class="x">x</div>
b12
<div class="y">y</div>
b13</div>
b11 b12 b13
<div class="c">c</div>
</div>
<div class="b" region="r" type="t2">b21
<div class="x">x</div>
b22
<div class="y">y</div>
b23</div>
<p>b21 b22 b23</p>
</body>
</html>
关于如何继续,您有什么建议吗?
答案 0 :(得分:1)
这对你有用吗?
<xsl:template match="div[@class='b']">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:for-each select="text()">
<xsl:if test="position() > 1">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="normalize-space(.)"/>
</xsl:for-each>
<xsl:apply-templates select="*"/>
</xsl:copy>
</xsl:template>