2016-08-23 118 views
0

我在使用XSLT格式化XML時遇到問題。目前,我的代碼寫的:使用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,但是我無法成功更改輸出。

回答

0

您不是在XSLT代碼中編寫詞法結果,而是編寫指令來創建可以序列化的結果樹。因此,無論你有一個文字結果元素寫成

<foo att1="value1" att2="value2"/> 

<foo att1="value1" 
    att2="value2"/> 

並不決定你的XSLT代碼序列化的結果看起來如何儘可能的屬性有關。就我所知,XSLT規範沒有對屬性格式和縮進做任何規定。然而用於指定串行線路長度,如果設置的是非常低的,然後每個屬性上屬於自己的行結束撒克遜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處理工具鏈。

+0

謝謝你的回答,但我不能使用撒克遜作爲我的XSLT – user6391187

+0

@ user6391187的一部分,我不知道任何其他XSLT處理器提供了一些擴展屬性來更改格式。無論如何,答案都包含一些提示,如編寫自己的序列化程序,以指示需要執行的操作。如何完成取決於所使用的XSLT處理器及其API和使用的平臺。因此,如果你想獲得具體的幫助,那麼你需要指出你使用了哪個XSLT處理器,以及如何使用它,因爲顯然編寫和插入定製串行器取決於在XSLT之外完成的一些編程。 –