我在使用XSLT格式化XML时遇到问题。目前我已编写代码:
<FileData>
<File
FileNumber="{$ISCI}"
title="Test Ad"
advertiser="{$Advertiser}"
/>
</FileData>
这反过来给我一个格式如下的输出:
<?xml version="1.0" encoding="utf-8"?>
<FileData>
<File FileNumber="CBIPI3316B6" advertiser="SOKOLOVE LAW" title="Test Ad"/>
</FileData>
我需要一种格式:
<?xml version="1.0" encoding="utf-8"?>
<FileData>
<File
FileNumber= "CBIPI3316B6"
advertiser= "SOKOLOVE LAW"
title= "Test Ad"
/>
有一种简单的方法来转换它吗?我尝试使用&amp; #xa但是我无法成功更改输出。
答案 0 :(得分:0)
您没有在XSLT代码中编写词法结果,而是编写指令以创建可以序列化的结果树。因此,您是否将文字结果元素写为
<foo att1="value1" att2="value2"/>
或
<foo att1="value1"
att2="value2"/>
没有确定XSLT代码的序列化结果如何与属性相关。据我记得,XSLT规范没有规定属性格式和缩进。然而,Saxon 9的商业版支持序列化扩展属性saxon:line-length
,用于指定序列化的行长度,如果设置得非常低,则每个属性最终都在它自己的行上,所以
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:param name="ISCI" select="'foo'"/>
<xsl:param name="Advertiser" select="'bar'"/>
<xsl:output method="xml" indent="yes" xmlns:saxon="http://saxon.sf.net/" saxon:line-length="5"/>
<xsl:template match="/">
<FileData>
<File FileNumber="{$ISCI}" title="Test Ad" advertiser="{$Advertiser}"/>
</FileData>
</xsl:template>
</xsl:transform>
例如输出
<FileData>
<File FileNumber="foo"
title="Test Ad"
advertiser="bar"/>
</FileData>
你必须检查你的XSLT处理器是否提供类似的东西,但一般来说如果你真的想要一个特定的序列化,那么我认为你需要编写自己的序列化器来获取XSLT转换的树结果并将其序列化或插入进入XSLT处理工具链。