我正在编写一个XSLT,其中下面是我的XML
<?xml version="1.0" encoding="UTF-8"?>
<body>
<para>
<page num="794"/>20 July 2009
</para>
<para>
cont1<case>
<casename>
<content-style font-style="italic">cont1</content-style> & <content-style font-style="italic">Drs</content-style>
</casename>
<content-style font-style="italic">cont1</content-style>
</case> cont1 <case>
<casename>
<content-style font-style="italic">cont1</content-style> & <content-style font-style="italic">cont1</content-style> & <content-style font-style="italic">mergCont</content-style>
</casename>
<content-style font-style="italic">[2004] 3 108</content-style>
</case> regarding postponement.
</para>
<casename>
<content-style font-style="italic">Link1</content-style> & <content-style font-style="italic">Drs</content-style>
</casename>
</body>
以下是我的XSLT
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:htm="http://www.w3.org/TR/html5/" exclude-result-prefixes="#all">
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<hmtl>
<head>
<title>New Version!</title>
</head>
<xsl:apply-templates/>
</hmtl>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template name="para" match="para">
<xsl:apply-templates select="./node()[1][self::page]" mode="first"/>
<xsl:apply-templates select="./phrase/following-sibling::node()[1][self::page]" mode="first"/>
<div>
<xsl:choose>
<xsl:when test="./@align">
<xsl:attribute name="class"><xsl:text>para align-</xsl:text><xsl:value-of select="./@align"/></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="class"><xsl:text>para</xsl:text></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="./@num">
<xsl:variable name="phrl">
<xsl:value-of select="string-length(./@num)"/>
</xsl:variable>
<xsl:variable name="phrase">
<xsl:value-of select="concat('P',./@num)"/>
</xsl:variable>
<xsl:variable name="newphrase" select="translate($phrase,'.','-')"/>
<a>
<xsl:attribute name="name"><xsl:value-of select="$newphrase">
</xsl:value-of></xsl:attribute>
<span class="phrase">
<xsl:value-of select="./@num"/>
</span>
</a>
</xsl:if>
<xsl:choose>
<xsl:when test="./phrase/following-sibling::node()[1][self::page]">
<xsl:apply-templates select="child::node() except descendant::page[1]"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
<!--<xsl:apply-templates/>-->
</div>
</xsl:template>
<xsl:template match="casename">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="page[not(preceding-sibling::node()[not(self::text()) or normalize-space()])]"/>
<xsl:template match="page" mode="first">
<xsl:variable name="pgn">
<xsl:value-of select="./@num"/>
</xsl:variable>
<xsl:processing-instruction name="pb">
<xsl:text>label='</xsl:text>
<xsl:value-of select="$pgn"/>
<xsl:text>'</xsl:text>
<xsl:text>?</xsl:text>
</xsl:processing-instruction>
<a name="{concat('pg_',$pgn)}"/>
</xsl:template>
<xsl:template match="page">
<xsl:variable name="pgn">
<xsl:value-of select="./@num"/>
</xsl:variable>
<xsl:processing-instruction name="pb">
<xsl:text>label='</xsl:text>
<xsl:value-of select="$pgn"/>
<xsl:text>'</xsl:text>
<xsl:text>?</xsl:text>
</xsl:processing-instruction>
<a name="{concat('pg_',$pgn)}"/>
</xsl:template>
</xsl:transform>
在我的XSLT中,当我删除<xsl:strip-space elements="*"/>
时,我得到的确切输出。但我没有将page
模板匹配,当我添加<xsl:strip-space elements="*"/>
时,我的page
模板已匹配,但我的HTML中缺少空格。以下是截图。
<xsl:strip-space elements="*"/>
即使我的page
匹配,但您可以看到&
之前和之后缺少空格
没有<xsl:strip-space elements="*"/>
我的page
不匹配
这是DEMO的工作。 http://xsltransform.net/pPzifqu/1
请告诉我,如何获取空格以及page
模板匹配。
由于
答案 0 :(得分:0)
删除此行<xsl:template match="page[not(preceding-sibling::node()[not(self::text()) or normalize-space()])]"/>
。当空格未被剥离时,这是匹配的,因此以下模板不匹配。