2014-03-06 64 views
0

這裏獲得通過的關鍵內容是我的示例XML實例:XSL從另一個XML子

<bloc id = "mybloc"> 
<ref_ex ref = "data1"/> 
<ref_ex ref = "data2"/> 
</bloc> 

<ex id = "data1"> 
    <name>Hello</name> 
    .. (something else) 
</ex> 
<ex id = "data2"> 
    <name>Hello Me !</name> 
    .. (something else) 
</ex> 

我想獲得這樣的html代碼:

<a href="#data1">Hello</a> 
<a href="#data2">Hello Me!</a> 

我試過這個XSL :

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0"> 
    <xsl:output method = "html"/> 
    <xsl:template match = "ref_ex"> 
     <a href = "#{@ref}"> 
      <xsl:template match = "ex" use="@ref"> 
       <xsl:value-of select = "@name"/> 
      </xsl:template> 
     </a> 
    </xsl:template> 
</xsl:stylesheet> 

,但我得到這個錯誤:

element template only allowed as child of stylesheet ! 

有人有任何想法做到這一點?尊重我的格式。

+0

那是你的全樣式? – helderdarocha

+0

你必須在''(或'''內部放置'',並且你的XML格式不正確,請將你的完整XSL包含到你的根目錄XML在這個例子中 – helderdarocha

+0

不僅僅是我做不到的一部分 – zeomega

回答

1

從評論部分:你根本不能在另一個xsl:template內使用xsl:template。爲什麼?因爲它感覺很糟糕。我建議你閱讀XSLT的基礎知識,以瞭解臨時匹配的概念。

下面的樣式表將ex元素轉換爲a元素,如果元素在bloc元素中被引用。按照@helderarocha的建議,另一個可行的解決方案是使用密鑰。

假設正確的輸入(根元素,使其良好形成):

<root> 
<bloc id = "mybloc"> 
<ref_ex ref = "data1"/> 
<ref_ex ref = "data2"/> 
</bloc> 

<ex id = "data1"> 
    <name>Hello</name> 
    <!--.. (something else)--> 
</ex> 
<ex id = "data2"> 
    <name>Hello Me !</name> 
    <!--.. (something else)--> 
</ex> 
</root> 

樣式

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:output method="xml" indent="yes"/> 
<xsl:strip-space elements="*"/> 


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

<xsl:template match="bloc[@id='mybloc']"> 
    <xsl:apply-templates select="//ex[id = current()/ref_ex/@ref]"/> 
</xsl:template> 

<xsl:template match="ex"> 
    <a href="{@id}"> 
     <xsl:value-of select="."/> 
    </a> 
</xsl:template> 

</xsl:stylesheet> 

輸出

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <a href="data1">Hello</a> 
    <a href="data2">Hello Me !</a> 
</root> 
+0

Awsome !!工作正常 – zeomega