2012-01-16 80 views
2

可以生成下面的輸出作爲xsl文件的變換輸出。帶有一些無效元素標記名稱的xslt輸出

需要輸出(沒有頂部標籤和標籤名稱以數字開頭)。由於這是一個無效的標籤,我嘗試設置輸出方法爲「text」

<134>my</134> 
<114>xml</114> 
<567>notgood</567> 
<789>me</789> 

輸入XML

<Root> 
<a>me</a> 
</Root> 

我使用了xsl,無法正常運轉的號碼不允許作爲標籤開始。但是,我們需要得到這個輸出。

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" indent="no"/> 
    <xsl:template match="/"> 
    <xsl:variable name="output"> 
     <Root> 
     <134>my</134> 
     <114>xml</114> 
     <567>notgood</567> 
     <789> 
      <xsl:value-of select="/Root/a"/> 
     </789> 
     </Root> 
    </xsl:variable> 
    <xsl:copy-of select="$output/Root" /> 
    </xsl:template> 
</xsl:stylesheet> 

回答

2

一個簡單的修改(變化<&lt;):

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" indent="no"/> 
    <xsl:template match="/"> 
     <xsl:variable name="output"> 
      <Root> 
       &lt;134>my&lt;134> 
       &lt;114>xml&lt;114> 
       &lt;567>notgood&lt;567> 
       &lt;789><xsl:value-of select="/Root/a"/>&lt;789> 
      </Root> 
     </xsl:variable> 
     <xsl:copy-of select="$output" /> 
    </xsl:template> 
</xsl:stylesheet> 

當所提供的XML文檔施加:

<Root> 
    <a>me</a> 
</Root> 

的變換產生想要的結果

  <134>my<134> 
      <114>xml<114> 
      <567>notgood<567> 
      <789>me<789> 

XSLT 可以有效地使用和比較方便,以產生非XML輸出 - 無論是HTML或只是簡單的文本

+0

很棒.......... – Suresh 2012-01-16 13:24:08

+0

@Maneesh:不客氣。 – 2012-01-16 13:32:52

1

您可以使用標記字符創建文本節點,例如

<xsl:output method="text"/> 

<xsl:template match="/"> 
    <xsl:text><![CDATA[<789>]]></xsl:text> 
    <xsl:value-of select="/Root/a"/> 
    <xsl:text><![CDATA[</789>]]></xsl:text> 
</xsl:template> 

,但我不知道XSLT或其他任何XML工具是一個不錯的選擇創造的東西,是不是XML。

+0

XSLT *可*被有效且非常方便地用於生成非XML輸出 - 無論是HTML還是純文本 – 2012-01-16 12:53:22

0

另一種選擇是,由於您生成的輸出格式與XML有某些相似之處,因此會生成有效的XML輸出並對其進行後處理。例如,您可以輸出<_123>代替<123>,然後使用sed或類似命令刪除下劃線。