我有一个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/)。 –