簡體   English   中英

從節點XSLT中刪除所有\\ n \\ r \\ n字符?

[英]Removing all \n\r characters from a node XSLT?

想知道你能幫我嗎? 我在xml中有節點,如下所示

$ LOG:08880xbpnd $
fhdsafidsfsd
DF
SD
FSD
F
SD
FSD

我想知道是否還有將所有文本轉到一行,以便它可以傳遞到javascript函數? 所以它會像這樣

$ LOG:08880xbpnd $ fhdsafidsfsddfsdfsdfsdfsd

不幸的是, normalize-space()函數(在andynormancx的答案中使用)不僅僅是刪除換行符

它刪除所有前導和尾隨空格, 並用一個空格字符替換任何一組內部可用空格

在許多情況下,我們只想刪除一種類型的空白字符(如當前情況 - 新行(CR + LF在XML解析器讀取時自動規范化為LF)。

正確和安全的方法是使用標准的XPath translate()函數

translate(., '
', '')

返回從當前節點的字符串值獲取的字符串,其中刪除了任何換行符。

這是一個例子

<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

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

  <xsl:template match="text()">
    <xsl:value-of 
     select="translate(.,'&#xA;','')"/>
  </xsl:template>
</xsl:stylesheet>

在此源XML文檔上應用上述轉換時

<t>
$LOG: 08880xbpnd $
"embedded    blanks    must    stay"
df
sd
fsd
f
sd
fsd
</t>

結果僅在一行上,根據需要,所有嵌入的空格保持不變

<t>$LOG: 08880xbpnd $"embedded    blanks    must    stay"dfsdfsdfsdfsd</t>

normalize-space() XPath函數應該做你想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM