2010-10-18 70 views
2

我目前有一個字符串(XSLT 1.0),我想將它變爲一個NodeList,以便可以使用下面的示例。在xsl中將字符串轉換爲節點列表

($的TestString表示XML樹的元素)

<xsl:apply-templates select="$testString"> 

<xsl:template match="$testString"> 

我曾嘗試使用下面的嘗試,但既不似乎工作

<xsl:apply-templates select="xx:node-set($testString)"> 
<xsl:apply-templates select="exslt:node-set($testString)"> 

是否有一個客場字符串轉換爲另一變量是什麼啊NodeList屬性?或者反正有這個嗎?

更新:我目前有一個使用XML調用XSL的JSP。 JSP頁面接受一個傳遞給XSL頁面的字符串。該字符串表示XML中的元素。我試圖通過每個節點搜索該元素並返回該元素的值。

+0

字符串不是節點。從字符串創建節點的唯一方法是嘗試使用XML解析器解析它。這不能在XSLT 1.0或2.0轉換中動態完成。 – 2010-10-18 13:17:53

回答

1

我現在有一個字符串(XSLT 1.0) 我想它變成一個節點列表

的字符串不是節點。從字符串創建節點的唯一方法是嘗試使用XML解析器解析它。這不能在XSLT 1.0或2.0轉換中動態完成。

如果字符串是靜態定義,它代表一個良好的XML片段,那麼它可以被指定爲一個<xsl:variable>的主體或<xsl:param>指令,並轉換到常規節點集合通過使用設置在xxx:node-set()擴展功能由@特別的供應商,如@亞歷杭德羅的答案更詳細地顯示。

如果您提供了有關您想要解決的任務的更多詳細信息(XML文檔,想要的結果,結果如何與源XML文檔相關),那麼很多人都可以提供幫助。

+0

字符串是從JSP發送的參數,我可以將它聲明爲JSP中的節點嗎?這個想法是允許用戶在xml文件中搜索特定的元素。 – Hammer 2010-10-18 13:46:35

+0

@Hammer:請更新/重寫問題並提供所有細節。如果定義完整的問題,幾乎所有的事情都可以用XSLT來完成。 – 2010-10-18 13:52:06

0

對於XSLT 1.0和XSLT 2.0,規則中的模式應與節點匹配。在XSLT 1.0中不應該有變量/參數引用。

node-set擴展函數將Result Tree Fragment轉換爲節點:RTF的節點根。

所以,爲了做到你想要什麼,你應該使用:

<xsl:variable name="vStringRTF"> 
    <!-- Your string --> 
</xsl:variable> 

<xsl:apply-templates select="exslt:node-set($vStringRTF)/node()"/> 

<xsl:template match="text()"/> 
1

你有你的樣式表中的EXSLT命名空間聲明?以下作品適用於任何xml輸入(libxslt/xsltproc)

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:exslt="http://exslt.org/common" 
    version="1.0"> 

    <xsl:template match="/"> 
     <xsl:variable name="xml-string"><foo bar="baz">etc...</foo></xsl:variable> 
     <xsl:variable name="xml-node" select="exslt:node-set($xml-string)"/> 
     Bar is <xsl:value-of select="$xml-node//@bar"/> 
    </xsl:template> 

</xsl:stylesheet>