2016-03-02 113 views
0

最近的更新我已經包括一個樣品XSL和電流輸出:)XSL TR和TD元素

示例XML

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0" 
    xmlns="http://www.w3.org/1999/xhtml" 
    exclude-result-prefixes="xsl"> 
    > 
    <xsl:output method="xml" encoding="UTF-8" indent="yes" /> 
    <xsl:template match="/Report"> 
     <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt; 
     </xsl:text> 
     <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
      <head> 
       <title>My Report</title> 
      </head> 
      <body> 
      <xsl:element name="table" namespace=""> 
       <xsl:element name="tr" namespace=""> 
        <xsl:attribute name="id">123</xsl:attribute> 
        <xsl:element name="td" namespace=""> 
         <xsl:attribute name="style">width: 15%;</xsl:attribute> 
         <xsl:element name="div" namespace=""> 
          mememe 
         </xsl:element> 
        </xsl:element> 

        <xsl:element name="td" namespace=""> 
         <xsl:element name="div" namespace=""> 
          hi there 
         </xsl:element> 
        </xsl:element> 

        <xsl:element name="td" namespace=""> 
         <xsl:attribute name="style">width: 3%; text-align:center; padding:0px;</xsl:attribute> 
         <xsl:element name="div" namespace=""> 
          no chance 
         </xsl:element> 
        </xsl:element> 
       </xsl:element> 
      </xsl:element> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

電流輸出

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title>My Report</title> 
    </head> 
    <body> 
     <table xmlns=""> 
      <tr id="123"> 
       <td style="width: 15%;"> 
        <div> 
          mememe 
        </div> 
       </td> 
       <td> 
        <div> 
          hi there 
        </div> 
       </td> 
       <td style="width: 3%; text-align:center; padding:0px;"> 
        <div> 
          no chance 
        </div> 
       </td> 
      </tr> 
     </table> 
    </body> 
</html> 

問題 xmlns =「」打破了我嚴格的HTML驗證以及所有後續的CSS。我如何擺脫它?謝謝!

,除非你想看看它是如何開始


編輯我需要tr標籤的屬性id,因爲我需要分配值,所以我可以使用它,不要向下滾動作爲一個定位點。

CODE

<xsl:template match="Details"> 
<xsl:element name="tr"> 
    <xsl:attribute name="id"> 
     <xsl:value-of select="following-sibling::PluginID"></xsl:value-of> 
     <xsl:element name="td">Mall 3</xsl:element> 
     <xsl:element name="td">00003</xsl:element> 
     <td class="medium"> 
      <div> 
       <a href="#top"> 
        <xsl:apply-templates select="text()"/> 
       </a> 
      </div> 
     </td> 
     <td class="darkstyle" style="width: 3%; text-align:center; padding:0px;"> 
      <div> 
        <a href="#top">Top</a> 
      </div> 
     </td> 
    </xsl:attribute> 
</xsl:element> 
</xsl:template> 

發行

我不能使用xsl:element添加<td>,我也不能使用html <td>標籤。 那麼我該如何做?有TD有類和其他風格需要應用inline,他們應該都有一個<div>其中有一些價值。

除非是否有另一種方法將PluginID的值賦值爲<tr>

然後我該如何添加實際的<div>以及它的價值?

任何幫助或建議,將不勝感激!

編輯我得到的類應用和它轉換沒有錯誤,但CSS <style>標籤沒有被應用,只有類的風格是!有任何想法嗎?

<xsl:element name="tr"> 
    <xsl:attribute name="id"> 
     <xsl:value-of select="following-sibling::PluginID"></xsl:value-of> 
    </xsl:attribute> 
    <xsl:element name="td"> 
     <xsl:attribute name="class"> 
      medium 
     </xsl:attribute> 
     <xsl:attribute name="style"> 
      width: 15%; 
     </xsl:attribute> 
     <xsl:element name="div"> 
      <xsl:value-of select="following-sibling::RiskDesc"/> 
     </xsl:element> 
    </xsl:element> 

    <xsl:element name="td"> 
     <xsl:attribute name="class"> 
      medium 
     </xsl:attribute> 
     <xsl:element name="div"> 
      <xsl:apply-templates select="text()"/> 
     </xsl:element> 
    </xsl:element> 

    <xsl:element name="td"> 
     <xsl:attribute name="class"> 
      darkstyle 
     </xsl:attribute> 
     <xsl:attribute name="style"> 
      width: 3%; text-align:center; padding:0px; 
     </xsl:attribute> 
     <xsl:element name="div"> 
      Top 
     </xsl:element> 
    </xsl:element> 
</xsl:element> 

電流輸出

<tr xmlns="" id="10026"> 
    <td class="&#10;&#9;&#9;&#9;&#9;&#9;medium&#10;&#9;&#9;&#9;&#9;" style="&#10;&#9;&#9;&#9;&#9;&#9;width: 15%;&#10;&#9;&#9;&#9;&#9;"> 
     <div>Medium</div> 
    </td> 
    <td class="&#10;&#9;&#9;&#9;&#9;&#9;medium&#10;&#9;&#9;&#9;&#9;"> 
     <div>Derp Derp</div> 
    </td> 
     <td class="&#10;&#9;&#9;&#9;&#9;&#9;darkstyle&#10;&#9;&#9;&#9;&#9;" style="&#10;&#9;&#9;&#9;&#9;&#9;width: 3%; text-align:center; padding:0px;&#10;&#9;&#9;&#9;&#9;"> 
     <div> 
      Top 
     </div> 
    </td> 
</tr> 

編輯簡單的例子:

<xsl:element name="div"> 
    <xsl:attribute name="class"> 
     darkstyle 
    </xsl:attribute> 
    <!-- THE ISSUE IS THAT THIS STYLE ATTRIBUTE IS NOT BEING APPLIED! --> 
    <xsl:attribute name="style"> 
     width: 3%; text-align:center; padding:0px; 
    </xsl:attribute> 
    <xsl:element name="div"> 
     Top 
    </xsl:element> 
</xsl:element> 

ASSOCIATED CSS

.darkstyle{ 
    vertical-align: text-top; 
    background:#666; 
} 

UPDATE的一個問題是,我有這正在變成轉義字符選項卡上ONE線使用

<xsl:attribute name="class">darkstyle</xsl:attribute>

,它會創建適當的HTML。

我設法跟蹤突破至<tr>標籤,上面的代碼,生成以下內容:

<tr xmlns="" id="10020">

正是這種xmls="",打破我所有的CSS的。 我能做些什麼?僅供參考:我嘗試將namespace=""添加到tr,但這並不妨礙它。

XSL

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0" 
    exclude-result-prefixes="yes" 
    > 
    <xsl:output method="xml" encoding="UTF-8" indent="yes" /> 
    <xsl:template match="/Report"> 
     <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt; 
     </xsl:text> 
     <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
      <head> 
+0

你爲什麼試圖在屬性內的下幾個元素? –

+0

@Jim Garrison我需要爲'tr'指定一個id值,並且我需要創建具有應用樣式的'td's'。我不明白你的問題。你能解釋一下你的意思嗎? – codeCompiler77

+0

也許您可以向我們提供我們可以用來重現錯誤的輸入 –

回答

1

你的處理器添加一個空的默認命名空間到所有行的頂部。這會導致您的瀏覽器對於是否應該將表格視爲表格行來處理混淆。

要解決此問題,可以通過在樣式表根目錄中聲明此默認名稱空間,將所有非名稱空間元素置於默認名稱空間中。

此外,排除結果前綴屬性需要前綴列表,而不是yes/no值。這是您不想附加到生成文檔的名稱空間前綴列表。在你的情況下,它是xsl。許多處理器會導致一個錯誤,其中有一個無效的值,但由於某些原因,你的顯然不是。

在您xsl:stylesheet元素添加xmlns="http://www.w3.org/1999/xhtml",並更改排除對結果的前綴,以便讀取

<xsl:stylesheet 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     version="1.0" 
     xmlns="http://www.w3.org/1999/xhtml" 
     exclude-result-prefixes="xsl"> 

此外,避免specifiing一個空的命名空間與動力的namespace=""屬性元素,除非它們明確需要一個空的名稱空間(即不是HTML元素)。

+0

感謝您的回覆,請參閱上面的更新。這並沒有刪除xmlns =「」標記:( – codeCompiler77

+0

@ codeCompiler77刪除所有的'namespace =「」'屬性,這些都覆蓋了默認的命名空間,並且是你的問題的根源 – Matthew

+0

**先生!你是一個紳士和學者,我很感謝你:) **如果沒有太多的麻煩,你介意解釋爲什麼xsl排除工作嗎?具體是什麼XSL排除。我嘗試過xhtml,然後我嘗試了yes/no,這是我在接受的一個stackoverflow中看到的答案:( – codeCompiler77