我需要一些XSLT(或,這是 - 請參閱下面的內容)用替代字符替換所有屬性中的換行符。使用XSLT替換XML屬性中的換行符
我有處理舊XML存儲所有數據的屬性,並使用新的線來表達基數。例如:
<sample>
<p att="John
Paul
Ringo"></p>
</sample>
這些新線正在用空格代替,當我解析Java中的文件(根據XML規範),但我希望把他們當作一個列表,所以這種行爲是不特別有用。
我的「解決方案」是使用XSLT來取代所有換行符在與其他一些分隔符的所有屬性 - 但我有XSLT的零知識。到目前爲止,我所見過的所有例子都是非常具體的,或者取代了節點內容而不是屬性值。
我已經涉足與XSLT 2.0的replace()
但我有一個很難把一切融合在一起。
XSLT甚至是正確的解決方案嗎?與下面的XSLT:
<xsl:template match="sample/*">
<xsl:for-each select="@*">
<xsl:value-of select="replace(current(), '\n', '|')"/>
</xsl:for-each>
</xsl:template>
應用到示例XML
輸出以下使用撒克遜:
John Paul Ringo
顯然,這種格式是不是以後我 - 這僅僅是與replace()
實驗 - 但是到了XSLT處理的時候,換行符已經被標準化了嗎?如果是這樣,是否有任何其他方式來解析這些值作爲使用Java解析器令狀?迄今爲止我只使用JAXB。
我有一個非常討厭的感覺,我可能需要戴上我的橡膠手套,並在解析之前在XML字符串上實現一個骯髒的正則表達式。不幸的是,我無法控制正在生成的XML。 – nullPainter
其實不,這太可怕了,不能考慮。 – nullPainter
如果屬性值中的空白在語義上很重要,那麼您不會處理XML,而需要使用非XML工具來處理它。 [根據規範](http://www.w3.org/TR/xml/#AVNormalize)屬性值中的所有換行符_must_必須由解析器轉換爲空格,並且如果您希望在您看到的值中包含換行符解析後,它必須作爲字符引用轉義(' ') –