将字符串转换为xsl中的节点列表

时间:2010-10-18 13:13:20

标签: xml xslt

我目前有一个字符串(XSLT 1.0),我想将其转换为NodeList,以便可以使用以下示例。

($ 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中的元素。我试图搜索每个节点寻找该元素并返回元素的值。

3 个答案:

答案 0 :(得分:1)

  

我目前有一个字符串(XSLT 1.0)   我想把它变成NodeList

字符串不是节点。从字符串创建节点的唯一方法是尝试使用XML解析器解析它。这不能在XSLT 1.0或2.0转换中动态完成。

如果字符串是静态定义的并且它表示格式良好的XML片段,则可以将其指定为<xsl:variable><xsl:param>指令的主体并转换为常规节点集使用特定供应商提供的xxx:node-set()扩展功能,详见@ Alejandro的回答。

如果您提供有关要解决的任务的更多详细信息(XML文档,想要的结果,结果与源XML文档的关系),那么很多人都可以提供帮助。

答案 1 :(得分: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>

答案 2 :(得分:0)

对于XSLT 1.0和XSLT 2.0,规则中的Pattern应与节点匹配。在XSLT 1.0中,不应该有变量/ param引用。

node-set扩展函数将结果树片段转换为节点:RTF的节点根。

所以,为了做你想做的事,你应该使用:

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

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

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