2014-12-07 44 views
0

爲空標記創建重複標記而沒有使用xslt的任何空間。
例如要求在代碼:如何使用xslt爲空標記創建xml開始和結束標記使用xslt

<?xml version = "1.0" encoding = "UTF-8"?> 
<root> 
    <Name>PJ</Name> 
    <address/> 
    <param/> 
</root> 

輸出爲:

<?xml version = "1.0" encoding = "UTF-8"?> 
<root> 
    <Name>PJ</Name> 
    <address></address> 
    <param></param> 
</root> 
+1

它爲什麼重要? – 2014-12-07 06:49:43

+0

客戶端正在使用舊系統,他們需要這種格式。 – roushan 2014-12-07 07:00:03

+0

我不知道這樣做的好方法。表面上,您可以將輸出方法設置爲HTML,但是您的處理器很可能根本不會關閉標記。 「壞」的方式會將標籤作爲文本輸出,我不能真正推薦這麼做。 – 2014-12-07 07:11:18

回答

1

正如我在評論中說,我真的不能推薦這一點,但如果一切都失敗嘗試,包括以下您的樣式表中的模板:

<xsl:template match="*[not(* or text())]"> 
    <xsl:variable name="name" select="local-name()"/> 
    <xsl:value-of select="concat('&lt;', $name, '&gt;&lt;/', $name, '&gt;')" disable-output-escaping="yes"/> 
</xsl:template> 

請注意,這不會複製名稱空間或屬性。

+0

這使輸出PJ

但我在這裏失蹤,其是具有值的字段 – roushan 2014-12-07 07:40:39

+1

嗯,當然,你是:你需要將**添加到您現有的樣式表(您沒有向我們展示過)。 – 2014-12-07 07:48:31

+0

正在創建一個新的xslt,因爲你說:<?xml version =「1.0」encoding =「UTF-8」?> roushan 2014-12-07 07:51:35

0

<?xml version="1.0" encoding="UTF-8"?> 
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
 
<xsl:output method="xml" encoding="UTF-8"/> 
 
<xsl:template match="*"> 
 
<xsl:element name="{local-name()}"> 
 
<!-- <xsl:variable name="name" select="local-name()"/> --> 
 
    <xsl:value-of select="concat('&lt;', local-name(), '&gt;&lt;/', local-name(), '&gt;')" disable-output-escaping="yes"/> 
 
<xsl:apply-templates select="@* | node()"/> 
 
</xsl:element> 
 
</xsl:template> 
 
<xsl:template match="text() | processing-instruction() | comment()"> 
 
<xsl:copy/> 
 
</xsl:template> 
 
</xsl:stylesheet>

+0

不,那不是 – 2014-12-07 09:03:21

1

讓你的XSLT做它的事,不要試圖將其彎曲(1)

取出它生成的XML文件,並用正則表達式代替(2)<([^/\s]+)\s*/><\1></\1>


(1)試圖彎曲它只會產生極其醜陋XSLT沒有很好的理由。

(2)確保你打開和保存在XML文件中,它在,你的情況UTF-8編碼。

+0

我沒有理解你的替換函數,你可以詳細說明它。 – roushan 2014-12-07 08:52:13

+0

以您選擇的編程/腳本語言編寫一個三行腳本,將XML文件作爲文本打開,執行正則表達式搜索和替換操作並再次保存它,或者擴展運行XSLT轉換的程序。認爲這將是顯而易見的。 – Tomalak 2014-12-07 08:55:02

+1

@roushan作爲一邊,請不要使用聊天說話像「u plz」上 堆棧溢出。我們有足夠的時間在這裏正確地拼出單詞。 – Tomalak 2014-12-07 09:01:55