2012-07-18 42 views
1

XML:如何利用父節點屬性,XSLT,而無需使用模板

<?xml version="1.0"?> 
<student_list> 
<ID No="A-1"> 
<name>Jon</name> 
<mark>80</mark> 
</ID> 
<ID No="A-2"> 
<name>Ray</name> 
<mark>81</mark> 
</ID> 
</student_list> 

我的xsl:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="text" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:apply-templates /> 
    </xsl:template> 

<xsl:template match="//ID"> 
    ID:string:" 
<xsl:value-of select="@No"/>" 
      </xsl:template> 

    <xsl:template match="name"> 
     name:string:"<xsl:apply-templates />" 
    </xsl:template> 

    <xsl:template match="mark"> 
     mark:string:"<xsl:apply-templates />" 
    </xsl:template> 

</xsl:stylesheet> 

產量預計: ID:字符串: 「A-1」 名稱:字符串: 「喬恩」 標記:字符串: 「80」 ID:字符串: 「A-2」 名:字符串: 「雷」 標記:字符串: 「81」

一些plz的幫助。


感謝響應,真是太好了我通過更新上面的代碼得到的輸出,但我怎樣才能得到每個斷線之後,在「文本輸出」每一行使用此代碼mode.i嘗試:

<xsl:template name="Newline"><xsl:text> 
</xsl:text> 
</xsl:template> 

line--1 
<xsl:call-template name="Newline" /> 
line--2 

但這並不能讓我換行。任何信息都會有幫助。再次感謝。

+0

歡迎來到SO!它看起來像你已經添加了一個答案作爲你的問題的更新...請添加這個作爲編輯你的問題,使其他人更容易看到和回答它。編輯會將您的問題排在隊列中,因此它會以這種方式獲得更多流量! – 2012-07-19 19:15:07

回答

1

的問題是,標記元素是ID元素的孩子,但在你的模板,該ID你沒有任何代碼來繼續處理孩子相匹配,並所以他們不匹配。

ID匹配模板更改爲以下:

<xsl:template match="//ID"> 
    ID:string:"<xsl:value-of select="@No"/>" 
    <xsl:apply-templates /> 
</xsl:template> 

如果您擔心新的生產線,它很可能是更好的做這樣的事情(如果 是一個回車得到新行)

<xsl:template match="//ID"> 
    <xsl:value-of select="concat('ID:string:&quot;', @No, '&quot;&#13;')" /> 
    <xsl:apply-templates/> 
</xsl:template> 

或者,也許這....

<xsl:template match="//ID"> 
    <xsl:text>ID:string:"</xsl:text> 
    <xsl:value-of select="@No" /> 
    <xsl:text>"&#13;</xsl:text> 
    <xsl:apply-templates/> 
</xsl:template> 

以下是完整的XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="text" indent="yes"/> 

    <xsl:template match="//ID"> 
     <xsl:value-of select="concat('ID:string:&quot;', @No, '&quot;&#13;')" /> 
     <xsl:apply-templates/> 
    </xsl:template> 

    <xsl:template match="name|mark"> 
    <xsl:value-of select="concat(local-name()), ':string:&quot;', ., '&quot;&#13;')" /> 
    </xsl:template> 
</xsl:stylesheet> 

那麼這應該給您預期的結果。

ID:string:"A-1" 
name:string:"Jon" 
mark:string:"80" 
ID:string:"A-2" 
name:string:"Ray" 
mark:string:"81" 

注意我是如何結合模板標誌共享代碼。

+0

感謝您的迴應朋友,真的很棒我通過更新上面的代碼得到了輸出,但是我怎樣才能在文本輸出中的每一行都得到換行符。我嘗試使用此代碼: 的 線 - 1 的 line-- 2 但這不是給我換行符。任何信息都會有幫助。 再次感謝。 – user1535437 2012-07-19 13:27:34

+0

我已經擴展了我的答案,以展示如何處理換行符,但是您確實需要在原始問題中明確表達,而不是在評論中明確表達。謝謝 – 2012-07-19 15:37:26

相關問題