2011-11-15 68 views
0

我有類似形式的XML數據:串聯在XSL節點,並把值轉換成HTML「title」屬性

<Parent> 
    <Child>Value1</Child> 
    <Child>Value2</Child> 
    <Child>Value3</Child> 
    . 
    . 
    . 
</Parent> 

我必須設置封閉標籤來連接值的HTML title屬性,事像:

<xsl:attribute name="title">Value1,Value2,Value3,.,.,.</xsl:attribute> 

我查了SO以前提出的問題,但大多數解決方案都多,(並且是新XSL)我認爲,這我不能包括我<xsl:attribute></xsl:attribute>標籤內的多碼。如何去做這件事?

回答

2
<xsl:template match="Parent"> 
    <xsl:attribute name="title"> 
    <xsl:for-each select="Child"> 
    <xsl:if test="position() != 1">, </xsl:if> 
    <xsl:value-of select="."/> 
    </xsl:for-each> 
    </xsl:attribute> 
</xsl:template> 
+0

我換行'的, '和輸出現在很好... – c0da

+0

哦,對。我已經解決了答案。 – kan

1
<xsl:template match="Parent"> 
    <xsl:attribute name="title"> 
    <xsl:for-each select="Child"> 
    <xsl:value-of select="."/> 
    <xsl:if test="not(position()=last())">, </xsl:if> 
    </xsl:for-each> 
    </xsl:attribute> 
</xsl:template> 
+0

您複製粘貼了以前的解決方案?你可以投票選舉前一個! – c0da

+0

爲什麼downvote答案!? – Treemonkey

+0

其他答案仍然是錯誤的:/ – Treemonkey

3

XSLT 2.0溶液

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="Parent"> 
    <Parent title="{string-join(Child, ', ')}"/> 
</xsl:template> 
</xsl:stylesheet> 

當這個變換所提供的XML文檔施加:

<Parent> 
    <Child>Value1</Child> 
    <Child>Value2</Child> 
    <Child>Value3</Child> 
</Parent> 

有用,正確的結果是產生

<Parent title="Value1, Value2, Value3"/> 

或者,如果一個人想覆蓋身份規則有更大的靈活性

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 
    <xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="Child[1]"> 
    <xsl:attribute name="title" select="string-join(../Child, ', ')"/> 
</xsl:template> 

<xsl:template match="Child"/> 
</xsl:stylesheet> 

當這種轉化是在同一個XML文檔(以上)應用中,相同的通緝,正確的結果再次產生

<Parent title="Value1, Value2, Value3"/> 
0

我不k現在很多關於xsl,但有一個xpath函數字符串加入可以使用可能在xsl中,以便可以減少行數。我通常在Orbeon Xforms中使用這個函數。

string-join(/Parent/Child, ',') 

參考:http://www.w3schools.com/xpath/xpath_functions.asp