我有一個xml文件需要以特定方式格式化以確保可讀性。使用xslt重新格式化xml文件並保留確切格式
源XML
<?xml version="1.0" encoding="UTF-8"?>
<facility>
<attributes>
<id>1</id>
<name>Facility Name</name>
<coordinate>Lat,Long</coordinate>
<projection>mercator</projection>
<units>imperial</units>
<showcart>yes</showcart>
<shotplanner>yes</shotplanner>
<sound>on</sound>
<gfbkgcolor>#ff0000</gfbkgcolor>
<gftxtcolor>#ffffff</gftxtcolor>
<gcbkgcolor>#ffffff</gcbkgcolor>
<gctxtcolor>#000000</gctxtcolor>
</attributes>
</facility>
期望輸出
<facility name="Facility Name" id="1"
coordinate="Lat,Long" projection="mercator"
units="imperial" showcart="yes" shotplanner="yes"
sound="on" gfbkgcolor="#ff0000" gftxtcolor="#ffffff"
gcbkgcolor="#ffffff">
</facility>
Ive得到了一個複雜的XML文件,但是那幾乎是我想要做的事。
XSL模板
<?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" indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="facility/attributes">
<facility id="{id}" name="{name}"
coordinate="{coordinate}">
</facility>
<xsl:text>
</xsl:text>
<test>"hello"</test>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
使用此<xsl:text>
</xsl:text>
似乎拋出一個錯誤,並且不顯示輸出XML。
- 是否有可能在使用xsl的某些屬性之後出現換行符?
- 我可以在給定元素中的兒童之間有換行符(所以他們可以按邏輯分組)?
我正在通過php形成上述xml。一旦我有了這個xml,我希望它能像上面提到的那樣格式化。我可以使用PHP字符串來完成它,但它是一個巨大的文件,並且這樣做會非常繁瑣。 xsl可以用來解決這個問題嗎?
任何關於如何實現這一點的指針將不勝感激。 Thx
你需要了解的是XSLT的處理模型接受一個輸入樹並將其轉換爲具有元素節點與屬性節點的結果樹而屬性的任何格式和在創建結果樹之後,它們之間的空間是可選的序列化步驟。因此,某些屬性之間的換行符不是XSLT轉換創建的內容,它將成爲序列化的一部分。 XSLT 1.0定義的序列化選項不提供任何屬性之間換行符的設置。 –
所以實現這個輸出的唯一方法就是用正確的格式將它寫出到一個使用php的文件中? – Karthik
要將'attributes'元素的子元素轉換爲屬性,您可以優雅地使用XSLT,但爲了強制執行特定的屬性格式化,您需要查看XSLT處理器的序列化選項,或者自己實現序列化,無論是PHP還是XSLT (如http://lenzconsulting.com/xml-to-string/)。 –