首页 文章

使用XSLT的XML格式化问题

提问于
浏览
0

我在使用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"
      />

有一种简单的方法来转换它吗?我尝试使用&#xa但是我无法成功更改输出 .

1 回答

  • 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加工工具链 .

相关问题