2016-07-27 39 views
0

我試圖弄平一些XML代碼,因此我想刪除特殊元素內的換行符和多個空白節點。XSLT:如何刪除元素內的換行符字符

例如:

<root> 
    <elment1> 
     <element2>some text... 
      <element3>some text...</element3> 
      <element3>some text...</element3> 
      <element3>some text... 
       <element4>some text...</element4> 
      </element3> 
     </element2> 
    </elment1> 
    <elment1> 
     <element2>some text... 
      <element3>some text...</element3> 
      <element3>some text...</element3> 
      <element3>some text... 
       <element4>some text...</element4> 
      </element3> 
     </element2> 
    </elment1> 
</root> 

輸出:

<root> 
    <elment1> 
     <element2>some text... <element3>some text...</element3> <element3>some text...</element3> <element3>some text... <element4>some text...</element4></element3></element2> 
    </elment1> 
    <elment1> 
     <element2>some text... <element3>some text...</element3> <element3>some text...</element3> <element3>some text... <element4>some text...</element4></element3></element2> 
    </elment1> 
</root> 

是否有生產用XSLT這種輸出方式?

謝謝!

編輯:

我用下面的模板,例如:

<xsl:template match="element2//text()"> 
    <xsl:analyze-string select="." regex="(&#10;| +)"> 
     <xsl:matching-substring></xsl:matching-substring> 
     <xsl:non-matching-substring> 
      <xsl:value-of select="."/> 
     </xsl:non-matching-substring> 
    </xsl:analyze-string> 
</xsl:template> 

我曾經分析串,因爲正常化空間()刪除了一些必要的空格字符。我的問題是,爲什麼不是模板在element2中創建「換行節點」?編號2: 我用<xsl:output encoding="UTF-8" indent="yes" method="xml"></xsl:output>。沒有輸出指令它就起作用。

+0

爲什麼是這個必要嗎? –

+0

在這種情況下,因爲InDesign無法正確處理嵌套的XML-Code \t空白節點。所以我需要一行縮進節點。 – Ferestes

回答

1

使用模板對那些文本節點,可能使用normalize-space()足夠:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 


    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="element2//text()"> 
     <xsl:value-of select="normalize-space()"/> 
    </xsl:template> 
</xsl:transform> 

這樣,我得到的輸出(http://xsltransform.net/pPJ8LUL

<?xml version="1.0" encoding="utf-8"?><root> 
    <elment1> 
     <element2>some text...<element3>some text...</element3><element3>some text...</element3><element3>some text...<element4>some text...</element4></element3></element2> 
    </elment1> 
    <elment1> 
     <element2>some text...<element3>some text...</element3><element3>some text...</element3><element3>some text...<element4>some text...</element4></element3></element2> 
    </elment1> 
</root> 
+0

我之前曾嘗試過,但在element2中匹配文本節點不會影響換行。結果第二個和第三個元素3仍然是打算 – Ferestes

+0

看到我得到的結果,我不知道你爲什麼說匹配'element2'的後代文本節點不允許你刪除換行符。 –

+0

你說得對。我使用了。使用此設置將無法使用。順便感謝頁面! – Ferestes