我得到了这样的输入:
<p><span class="someclass"/> Tekst <i>italic</i> etc..</p>
<p> Tekst <i>italic</i> etc..</p>
我希望输出为:
<p><span class="someclass"/>Tekst <i>italic</i> etc..</p>
<p>Tekst <i>italic</i> etc..</p>
如果我在混合内容模型中使用normalize-space(。),我还将删除&lt; i&gt; -element之前和之后的空格。
<p><span class="someclass"/>Tekst<i>italic</>etc..</p>
<p>Tekst<i>italic</i>etc..</p>
有解决这个问题的好方法吗?
答案 0 :(得分:1)
如果您要做的只是删除text()
元素的第一个p
子节点中的前导空格,那么使用XSLT 3.0可以使用
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:math="http://www.w3.org/2005/xpath-functions/math"
exclude-result-prefixes="xs math"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="p/text()[1]">
<xsl:value-of select="replace(., '^\s+', '')"/>
</xsl:template>
</xsl:stylesheet>
并使用XSLT 2.0,您必须拼出<xsl:mode on-no-match="shallow-copy"/>
作为身份转换模板
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:math="http://www.w3.org/2005/xpath-functions/math"
exclude-result-prefixes="xs math"
version="2.0">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="p/text()[1]">
<xsl:value-of select="replace(., '^\s+', '')"/>
</xsl:template>
</xsl:stylesheet>