2011-09-04 58 views
0

試試xsl,我有一個問題不會消失。我的樣式表代碼是這樣的XSL重複信息問題

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:template match="Fighter"> 
    <br/> 
    <br/> 
    <br/> 
    <b>Name </b> <xsl:value-of select="name"/> <br/> 
    <b>AKA</b>  <xsl:value-of select="nickname"/> <br/> 
    <b>Age</b>  <xsl:value-of select="age"/> <br/> 
    <b>Height</b>  <xsl:value-of select="height"/> <br/> 
    <b>Division</b> <xsl:value-of select="division"/> <br/> 
    <b>Reach</b>  <xsl:value-of select="reach"/> <br/> 
    <b>Stance</b>  <xsl:value-of select="stance"/> <br/> 
    <b>Nationality</b> <xsl:value-of select="nationality"/> <br/> 
    <b>Training Camp</b> <xsl:value-of select="camp"/> <br/> 
    <xsl:apply-templates/> 
</xsl:template> 

<xsl:template match="bout"> 
    <table width="100%" border="1"> 
     <tr> 
      <td width ="10%"><xsl:value-of select="result"/></td> 
      <td width ="10%"><xsl:value-of select="opponent"/></td> 
      <td width ="10%"><xsl:value-of select="waywon"/></td> 
      <td width ="10%"><xsl:value-of select="round"/></td> 
      <td width ="10%"><xsl:value-of select="event"/></td> 
      <td width ="10%"><xsl:value-of select="date"/></td> 
      <td width ="10%"><xsl:value-of select="location"/></td> 
      <td width ="10%"><xsl:value-of select="notes"/></td> 
     </tr> 
    </table> 
</xsl:template> 

<xsl:template match="/"> 
     <h1>LIST OF UFC FIGHTERS</h1> 
<xsl:apply-templates/> 
</xsl:template> 

</xsl:transform> 

我想獲得關於戰鬥機的一些信息displed,然後顯示如下的戰鬥記錄。但是它會一直添加額外的行,如下所示。

名稱喬治聖皮耶
AKA GSP
年齡30
身高5英尺10 在
司重量級
河段76
姿態 東正教
國籍加拿大
訓練營三星健身房

喬治聖皮耶GSP 30 5英尺10英寸重量級76加拿大東正教 三星體育館

爲什麼此信息打印兩次?我相信這可能很簡單,但這讓我非常沮喪。

+1

您可以發佈您的示例XML? – Damith

+1

你給我們展示了整個樣式表嗎?您向我們展示的XSLT是否包裹在標籤中?如果您正在轉換的文檔沒有完全與模板匹配,那麼XSLT處理器將應用一個普通的默認模板,基本上只是剝離標籤。 – ajk

回答

1

由於您在模板Fighter中應用了模板,名稱,暱稱,年齡等沒有模板,因此XSL只是複製在此節點中滿足的文本 - 將它放在XSL的末尾以避免出現此問題並保留應用模板有

<xsl:template match="*"></xsl:template> 

這將使空字符串,不被其他模板

+0

看起來像一個黑客來彌補潦草的模板寫作。 OP應該明確指出應用模板的節點,如DSW的答案。 – ajk

+0

這不是真的 - 當我想將模板應用到foo,foo1 ...並且我想要放置bar和bar1時 - 最好使用這個,併爲foo和foo1編寫模板(不必擔心在發生什麼時會發生什麼我添加foo2,忘記寫入evrywhere或我添加bar2) – SergeS

+0

+1爲更好的答案。 –

1

處理的任何標籤試試這個

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:template match="Fighter"> 
    <br/> 
    <br/> 
    <br/> 
    <b>Name </b> <xsl:value-of select="name"/> <br/> 
    <b>AKA</b>  <xsl:value-of select="nickname"/> <br/> 
    <b>Age</b>  <xsl:value-of select="age"/> <br/> 
    <b>Height</b>  <xsl:value-of select="height"/> <br/> 
    <b>Division</b> <xsl:value-of select="division"/> <br/> 
    <b>Reach</b>  <xsl:value-of select="reach"/> <br/> 
    <b>Stance</b>  <xsl:value-of select="stance"/> <br/> 
    <b>Nationality</b> <xsl:value-of select="nationality"/> <br/> 
    <b>Training Camp</b> <xsl:value-of select="camp"/> <br/> 
</xsl:template> 

<xsl:template match="bout"> 
    <table width="100%" border="1"> 
     <tr> 
      <td width ="10%"><xsl:value-of select="result"/></td> 
      <td width ="10%"><xsl:value-of select="opponent"/></td> 
      <td width ="10%"><xsl:value-of select="waywon"/></td> 
      <td width ="10%"><xsl:value-of select="round"/></td> 
      <td width ="10%"><xsl:value-of select="event"/></td> 
      <td width ="10%"><xsl:value-of select="date"/></td> 
      <td width ="10%"><xsl:value-of select="location"/></td> 
      <td width ="10%"><xsl:value-of select="notes"/></td> 
     </tr> 
    </table> 
</xsl:template> 

<xsl:template match="/"> 
     <h1>LIST OF UFC FIGHTERS</h1> 
<xsl:apply-templates select="Fighter"/> 
<xsl:apply-templates select="bout"/> 
</xsl:template> 

</xsl:transform>