2016-07-30 77 views
0

我讓我輸入這樣的去除混合內容元素的空間:不使用規範空間

<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>

如果我使用正常化空間( )在混合內容模型中,我還將刪除元素之前和之後的元素。

<p><span class="someclass"/>Tekst<i>italic</>etc..</p>
<p>Tekst<i>italic</i>etc..</p>

有沒有一個很好的方法來解決這個問題?

+0

您能用文字解釋您想要刪除的空格嗎?只有「p」的第一個文本節點子節點的前導空格?在這種情況下,''可能會。 –

回答

0

如果你想要做的是去除然後使用XSLT 3.0 p元素的第一text()子節點前導空格,你可以使用

<?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> 
+0

您好Martin,再次感謝您的回答。我有點用p/text()[1]和替換,但麻煩是身份轉換模板...就像沒有它:) 所以輸出保持不變:) – Heinrich1971