2014-07-19 149 views
0

我試圖用xslt 1.0從xml文檔創建html。在xml文檔中,有些客戶和某些客戶的名稱屬性中有「see XXXX」信息。從xml文檔創建Xslt的錨定

這裏是xml文檔;

<?xml version="1.0" encoding="UTF-8"?> 
<customers> 
    <customer name="Adam Dev" category="A1" phone="1234543" /> 
    <customer name="Jerry Sngiler (see Matt Pcneiv)" category="" phone="" /> 
    <customer name="Heid Schwan" category="B1" phone="121257456" /> 
    <customer name="Matt Pcneiv" category="A2" phone="65656565" /> 
    <customer name="John Lombak" category="A2" phone="787878787" /> 
    <customer name="April Ozil (see Heid Schwan)" category="" phone="" /> 
    <customer name="Terry Hill" category="B1" phone="1212121212" />  
</customers> 

我想創建一個固定的「姓名」,當用戶點擊第二個節點上的馬特Pcneiv屬性像below.I XML文檔中的相關XML節點意味着,頁面跳轉到馬特Pcneiv在4.node上,當用戶點擊6.node上的Heid Schwan時,頁面跳轉到3.node上的Heid Schwan。

<html> 
<head> 
<style> 
table,th,td 
{ 
border:1px solid black; 
border-collapse:collapse; 
} 
th,td 
{ 
padding:5px; 
} 
</style> 
</head> 
<body> 

<table style="width:600px"> 
<tr> 
    <th>Name</th> 
    <th>Category</th>  
    <th>Phone</th> 
</tr> 
<tr> 
    <td>Adam Dev</td> 
    <td>A1</td>  
    <td>1234543</td> 
</tr> 
<tr> 
    **<td>Jerry Sngiler (see <a href="#C1">Matt Pcneiv</a>)</td>** 
    <td></td>  
    <td></td> 
</tr> 
<tr> 
    **<td><a id="C2">Heid Schwan</a></td>** 
    <td>B1</td>  
    <td>121257456</td> 
</tr> 
<tr> 
    **<td><a id="C1">Matt Pcneiv</a></td>** 
    <td>A2</td>  
    <td>65656565</td> 
</tr> 
<tr> 
    <td>John Lombak</td> 
    <td>A2</td>  
    <td>787878787</td> 
</tr> 
<tr> 
    **<td>April Ozil (see <a href="#C2">Heid Schwan</a>)</td>** 
    <td></td>  
    <td></td> 
</tr> 
<tr> 
    <td>Terry Hill</td> 
    <td>B1</td>  
    <td>1212121212</td> 
</tr> 
</table> 
</body> 
</html> 

我該如何使用xsl?如果您能幫助我,我將不勝感激。 謝謝。

+0

難道你不喜歡填寫類別和電話並刪除參考? –

+0

我想,但這不是我可以接受的決定,謝謝。 –

回答

0

好的,那麼。首先:誰設計你的輸入XML是一個白癡。首先,您可以使用結構化數據工具;你爲什麼要把兩個名字塞進一個插槽?另一方面,如同地獄一樣,有一天會有兩個同名的客戶。

有了這樣的方式,你需要做的是提取所引用的名稱,並使用它作爲一個關鍵鏈接到所引用的人的主播:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:key name="customer-by-name" match="customer" use="@name" /> 

<xsl:template match="/"> 
    <table> 
     <tr> 
      <th>Name</th> 
      <th>Category</th>  
      <th>Phone</th> 
     </tr> 
     <xsl:apply-templates select="customers/customer"/> 
    </table> 
</xsl:template> 

<xsl:template match="customer"> 
    <tr> 
     <td><a id="{generate-id()}"><xsl:value-of select="@name"/></a></td> 
     <td><xsl:value-of select="@category"/></td>  
     <td><xsl:value-of select="@phone"/></td> 
    </tr> 
</xsl:template> 

<xsl:template match="customer[contains(@name, ' (see ')]"> 
    <xsl:variable name="ref-name" select="substring-before(substring-after(@name, ' (see '), ')')" /> 
    <tr> 
     <td> 
      <xsl:value-of select="substring-before(@name, ' (see ')"/> 
      <xsl:text> (see </xsl:text> 
      <a href="#{generate-id(key('customer-by-name', $ref-name))}"><xsl:value-of select="$ref-name"/></a> 
      <xsl:text>)</xsl:text> 
     </td> 
     <td><xsl:value-of select="@category"/></td>  
     <td><xsl:value-of select="@phone"/></td> 
    </tr> 
</xsl:template> 

</xsl:stylesheet> 
+0

謝謝你邁克爾的解決方案。 您是否認爲可以通過Category節點將分組添加到您的解決方案中?如何將Muenchian方法應用於您的解決方案? –

+0

將兩者結合起來不應該有任何問題。 –