我有幾個(〜5)大(〜1000線)與許多元素類似這樣的XML文件:更改空XML元素與自閉標籤元素
<Foo Bar="Baz">
</Foo >
我希望它們都變成這樣這個:
<Foo Bar="Baz" />
是否有工具或腳本會自動爲我做這個?注意:有些元素不是空的,不應該改爲自閉標籤;我只關心大約5個不同的元素名稱。
我有幾個(〜5)大(〜1000線)與許多元素類似這樣的XML文件:更改空XML元素與自閉標籤元素
<Foo Bar="Baz">
</Foo >
我希望它們都變成這樣這個:
<Foo Bar="Baz" />
是否有工具或腳本會自動爲我做這個?注意:有些元素不是空的,不應該改爲自閉標籤;我只關心大約5個不同的元素名稱。
如果您有xsltproc
或其他XSLT處理器,那麼這應該是非常簡單的。現在,您在問題中顯示的示例元素實際上並不是空的,因爲它包含文本節點(換行符)。但XSLT允許您指定僅可以忽略空白文本節點的元素。因此,這樣的樣式表
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:strip-space elements="Foo Bar Baz"/>
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>
</xsl:stylesheet>
應該做你需要的。 strip-space
告訴它哪些元素應該僅刪除僅含空白的文本節點子元素,並且該模板是將輸入複製爲輸出的恆等變換(之後在分析時發生的空白剝離)。一旦元素真的是空的,串行器應該把它們寫成自封閉的標籤。
我不認爲XSLT 1.0指定序列化器必須使用自閉標籤,但它幾乎肯定會。 – 2013-03-09 09:29:48
'xsltproc'肯定會爲空元素使用自閉標籤,我剛剛測試過這個。 – 2013-03-09 11:06:07
「大」有多大?而且「很多」元素都具有相同的名稱還是有所不同? – 2013-03-08 18:12:37
約1,000-2,000行。沒有足夠的麻煩一臺電腦,但足夠乏味手動去做。只有大約6個不同的名字。請注意,具有這些名稱的某些元素不是空的,不應將其更改爲自關閉標籤。 – Daryl 2013-03-08 18:44:21