使用FXSL(開源庫XSLT功能編程,在完全寫入XSL T)一個簡單地寫入:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="trim.xsl"/>
<xsl:output method="text"/>
<xsl:template match="/*/description">
'<xsl:call-template name="trim">
<xsl:with-param name="pStr" select="."/>
</xsl:call-template>'
</xsl:template>
</xsl:stylesheet>
當這個變換所提供的XML文檔應用:
<car>
<description> To get more information look at: www.example.com </description>
</car>
有用,正確的結果產生:
'To get more information look at: www.example.com'
trim
模板如何工作?
它修剪左前導空白,然後反轉結果字符串並修剪其前導空格,然後它最終反轉結果字符串。
二,的XPath 2.0溶液:
使用:
replace(replace(/*/description, '^\s*(.+?)\s*$', '$1'), '^ .*$', '')
下面是一個XSLT - 2.0 - 基於驗證:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
"<xsl:sequence
select="replace(replace(/*/description, '^\s*(.+?)\s*$', '$1'), '^ .*$', '')"/>"
</xsl:template>
</xsl:stylesheet>
當這個變換所提供的XML文檔施加(以上),評估XPath表達式並將此評估的結果複製到輸出中:
"To get more information look at: www.example.com"
我喜歡乾淨的解決方案,不必添加額外的庫 - 謝謝你的這個!由於我不得不先問問項目經理,我們是否可以添加額外的庫,這個解決方案對我來說顯然是可取的。我想沒有辦法簡單地把一個參數放在xsl文件的開頭,使所有的字段都被修剪,是嗎?我找到了'',但是這隻適用於像'concat(...)'這樣的其他轉換,導致像'姓氏,名字'而不是'姓氏,名字'的結果。看起來好像沒有這樣簡單的解決方案... –
@MathiasBader:在任何轉換之前,'xsl:strip-space'在源文檔上運行,並刪除僅包含空格的文本節點。它可能不會解決你的問題。最簡單的解決方案可能會創建一個單獨的轉換,它只修剪所選元素的空白,並將其結果用作第二個轉換的輸入。這可以在單個樣式表中使用特定處理器的擴展函數完成,也可以使用外部工具/ api來調用轉換。 –
通過外部工具使用單獨的(預處理)轉換是我也想到的。我只是認爲這個問題似乎很常見,我認爲必須有一個更簡單的XSLT提供的解決方案,我還沒有找到。 –