2010-08-10 29 views
0

我怎樣才能動態指定在該行通HREF動態XML文件

<?xml-stylesheet type="text/xsl" href="first.xsl"?> 
在XML

href值?

我想動態替換「first.xsl」。

感謝您的幫助。 ==================道歉搞亂這件事/難以讓你幫====

我的XML是:

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="first.xsl"?> 
<WinData records="1" fields="4"> 
<record id="1"> 
    <Name type="82">January</Name> 
    <Dept type="323">19</Dept> 
    <InceptionDate type="82">01/01/2010</InceptionDate> 
    <Salary type="645">3729.71</Salary> 
</record> 
<!-- Created from D:\AJAY\C#\VS2010\SBWA\XML --> 
</WinData> 

的XSL是:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!-- Edited by XMLSpy® --> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <html> 
    <body> 
    <h2>Sub Selection of Data</h2> 
    <table border="0"> 
     <tr bgcolor="#9acd32"> 
     <th>Name</th> 
     <th>Dept</th> 
     <th>InceptionDate</th> 
     <th>Salary</th> 
     </tr> 
     <xsl:for-each select="WinData/record" > 
     <xsl:sort select="./Name"/> 
     <xsl:sort select="./Dept"/> 
     <xsl:if test="Salary>100"> 
     <tr> 
     <td><xsl:value-of select="Name"/></td> 
     <td><xsl:value-of select="Dept"/></td> 
     <td><xsl:value-of select="InceptionDate"/></td> 
     <td><xsl:value-of select="Salary"/></td> 
     </tr> 
     </xsl:if> 
     </xsl:for-each> 
    </table> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

我的具體問題/目標:

  1. 我如何通過整合提供了iHeartGreek的代碼片段?
  2. 有沒有辦法將'replacement'xsl(snippet中的newLink.xsl)作爲參數傳遞?
+0

我粘貼的行不顯示 href =「first.xsl」 – AAsk 2010-08-10 20:09:17

+0

有一個選項可以將文本轉換爲代碼(這將確保類似代碼的文本顯示出來)。該按鈕位於格式欄上,其上有一堆二進制文件。 – developer 2010-08-10 20:14:28

+0

如果您發佈代碼或XML,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼」按鈕(101 010),以便對其進行精確格式化和語法突出顯示! – 2010-08-10 20:57:00

回答

0

您可以使用XSLT文檔來轉換您的XML數據。

用途:(假設節點被稱爲 「鏈接」)

<xsl:template match="link[.='first.xsl']"> 
    <xsl:element name="link"> 
     <xsl:text>newLink.xsl</xsl:text> 
    </xsl:element> 
</xsl:template> 
+0

謝謝iHeartGreek。 我需要一些更多的幫助。 我的XML(first.xml)看起來像: <?xml version =「1.0」encoding =「utf-8」?> <?xml-stylesheet type =「text/xsl」href =「first.xsl 「?> <記錄id = 「1」> \t <名稱類型= 「82」>一月 \t <系類型= 「323」> 19 \t 01/01/2010 \t <工資類型= 「645」> 3729.71 < - 從d創建:!\ AJAY \ C#\ VS2010 \ SBWA \ XML - > 如果我想使用替代newLink.xsl,在哪裏/如何合併您的代碼段?在first.xml或first.xsl中? – AAsk 2010-08-10 21:02:37

+0

@ aa2e72e:首先,在評論中閱讀這麼多代碼非常困難,如果您想要顯示有關XML代碼的更多細節,請編輯您的問題。 – developer 2010-08-10 21:09:08

+0

@ aa2e72e:其次,因爲您沒有正確格式化您的問題,所以我假定您要替換的文本位於名爲「link」的節點中,因此我的解決方案的精確複製/粘貼將不適用於您。但它給了你一個起點。要回答你的問題,我的解決方案需要創建一個新的XSLT文檔來完成轉換。這聽起來像你以前沒有使用XSLT(也稱爲XSL)? – developer 2010-08-10 21:12:27

1

兩個更多鈔票的解決方案。

1)雙程轉換。您可以輸出這樣的PI:

<xsl:processing-instruction name="xml-stylesheet"> 
    <xsl:value-of select="concat('type=&quot;text/xsl&quot; href=&quot;', 
           $whatever, 
           '&quot;')"/> 
</xsl:processing-instruction> 

2)使用「羣體」的格局(或「填補空白」,作爲Dimitre調用)和元數據URI與fn:document()得到的佈局。看這Dynamically decide which XSL stylesheet to use

注意:PI是輸入樹的一部分。無論這個輸入樹來自解析文檔還是DOM API或其他方式構建,對於XSLT處理器,只有一個類型爲「PI」的「靜態」節點具有「最終」字符串值。

+0

+1偉大的解決方案! :)我的解決方案是在他編輯他的問題之前提交的,我不得不假定他只是想改變一個普通的ol節點而不是處理指令..也許我會刪除它。 – developer 2010-08-11 16:52:04