2014-04-01 79 views
0

我使用Altova XMLSpy和Saxon。撒克遜在結果文件中添加了很多標籤和換行符。所以我加了模板(在這裏發現了計算器):在Saxon剝離額外的換行

<xsl:template match="*/text()[normalize-space()]"> 
    <xsl:value-of select="normalize-space()"/> 
</xsl:template> 

<xsl:template match="*/text()[not(normalize-space())]" /> 

樣式表,整齊地去除所有多餘的空白。

<p>this is <i>italic</i> text</p> 

所以兩者的Altova:但是,之前也和<我> .... < /我>和<q> .... </Q >一個<p>內後取出空間撒克遜給了我:

<p>this is<i>italic</i>text</p> 

我該如何解決這個問題?

+1

我不知道撒克遜人添加標籤和新行。請發佈最少但完整的XML,XSLT樣本以及想要的和生成的輸出,以便我們可以瞭解白色空間的來源。我們需要知道'xsl:output'的輸出方法和'indent'屬性的設置。 –

+0

感謝您的評論。縮進設置爲YES,當我將其設置爲NO時,Altova和Saxon不添加製表符和NL。他們也不會刪除i/q標籤前後提及的空間。但是,輸出也不縮進,所以很難讀取。對我來說,撒克遜將0D/0A組合改爲0A,並有很多空間。 – Erik

+1

XML解析和XSLT序列化都遵循相關規範中的規則,例如http://www.w3.org/TR/xml/#sec-line-ends命令,行結束由XML解析器進行規範化。正如我所說,發佈最少但完整的樣本可以讓我們理解並重現問題,然後我們可以告訴您如何解決問題。如果輸入是縮進的,並且您通過複製東西,那麼我確信在使用Saxon時,輸出也會縮進,除非您使用像<'。 –

回答

0

使用xsl:output元素來控制輸出的縮進。使用xsl:strip-space和xsl:preserve-space來控制輸入的空白​​處理。

使用像您僅顯示爲最後一招的兩個模板。在這裏,第一個模板是導致與您的i元素相鄰的空白區域丟失的模板,因爲處理器正在做你告訴他們要做的事情,而不是你想讓他們做的事情。