2015-09-05 96 views
0

這裏是我的xml:如果我改變這一行XSL屬性值沒有得到顯示

<tr> 
    <td border="1"><a href="broker_name">BARC</a></td> 
    <td border="1"><a href="broker_id">11 </a></td> 
</tr> 
然而

<RESPONSE heading="Broker List"> 
    <RESULTSET nbr="1" rowcount="11"> 
     <ROW nbr="1"> 
      <COL nbr="1" name="broker_name" datatype="String" href="api">BARC</COL> 
      <COL nbr="2" name="broker_id" datatype="String">11</COL> 
     </ROW> 
    </RESULTSET> 
</RESPONSE> 

這XLS作品:

<?xml version="1.0" encoding="iso-8859-1" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:template match="/RESPONSE"> 
<html> 
<head> 
</head> 
<body class='data'> 
    <h2><xsl:value-of select="./@heading"/></h2> 
    <xsl:apply-templates select="RESULTSET" /> 
</body> 
</html> 
</xsl:template> 

<xsl:template match="RESULTSET"> 
    <table id="result" class="sortable-theme-finder" data-sortable=""> 
     <thead> 
     <xsl:for-each select="ROW[1]/COL"> 
      <th> <xsl:value-of select="@name" /></th> 
     </xsl:for-each> 
     </thead> 
     <tbody> 
      <xsl:apply-templates select="ROW" /> 
     </tbody> 
    </table> 
    <br/> 
</xsl:template> 

<xsl:template match="ROW" > 
     <tr> 
     <xsl:apply-templates select="COL" /> 
    </tr> 
    </xsl:template> 

    <xsl:template match="COL"> 
     <td border="1"> 
      <a><xsl:attribute name="href"><xsl:value-of select="@href"/></xsl:attribute> 
      <xsl:value-of select="."/> 
      </a> 
     </td> 
    </xsl:template> 
</xsl:stylesheet> 

造成這樣的:

<xsl:value-of select="@name" /> 

<xsl:value-of select="@href" /> 

的結果是這樣的:

<tr> 
    <td border="1"><a href="">BARC</a></td> 
    <td border="1"><a href="">11 </a></td> 
</tr> 

爲什麼@href屬性未被選中?它只會接受名稱屬性。嘗試'身份證',但沒有去。我正在使用C#XslCompiledTransform來執行轉換。謝謝!

+0

源XML中沒有'href'屬性。唯一相似的是'ref'。 –

+0

我更新了xml以顯示href現在(仍然不起作用)。我想也許href是一個保留字,所以我嘗試了參考和其他屬性名稱。 – user3102739

+0

對不起,我不得不走出來幾個小時。我已按照您的要求提供了完整的xsl。 – user3102739

回答

0

更改

<xsl:attribute name="href"><xsl:value-of select="@name"/></xsl:attribute> 

<xsl:attribute name="href"><xsl:value-of select="@name"/></xsl:attribute> 

確實在此上下文中工作(內部xsl:for-each當前上下文節點)。我已經稍微適應你的樣式表以下,但它以類似的方式工作:

XSLT樣式表

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

    <xsl:output method="xml" omit-xml-declaration="no" encoding="UTF-8" indent="yes" /> 
    <xsl:strip-space elements="*"/> 

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

    <xsl:template match="COL"> 
     <td border="1"> 
      <a> 
       <xsl:copy-of select="@href"/> 
       <xsl:apply-templates/> 
      </a> 
     </td> 
    </xsl:template> 
</xsl:transform> 

XML輸出

和輸出將給出準確的輸入你顯示的文件:

<?xml version="1.0" encoding="UTF-8"?> 
<tr> 
    <td border="1"> 
     <a href="api">BARC</a> 
    </td> 
    <td border="1"> 
     <a>11</a> 
    </td> 
</tr> 

正如你所看到的,href屬性保留 - 對於輸入中出現的單個COL元素。

試試這個解決方案online here


我想也許是HREF保留字,所以我嘗試了裁判和其他屬性的名稱。

不,「href」不是XML中的保留名,也沒有預定義的語義,就像在HTML中一樣。

<xsl:value-of select="@href"/> 

將只檢索被稱爲的「href」屬性的內容。

+0

謝謝。我試着把你放在一起的小提琴,這確實有效,但是當我將它應用於我的代碼時,我仍然失敗。另外,上面的xml有一個名爲datatype的標籤。當我使用這個標籤時,它就起作用了。啊,我剛剛意識到,也許它失敗了,因爲只有一個COL節點有href屬性? – user3102739

+0

@ user3102739你的意思是「將它應用到你的代碼中」是什麼意思?如果樣式表中有其他模板,請編輯您的問題以顯示與問題相關的代碼。不,如果只有一個'COL'元素在輸入中具有'href'屬性,那麼只有_one_'href'應該在結果中是空的,而不是另一個。這適用於您的初始版本和我的版本的代碼。 –

+0

正如你可以從我的xsl看到的,我沒有對它進行轉換,但是用C#做了這樣的轉換,其中你的示例使用了轉換語句。 – user3102739