我目前有一个字符串(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中的元素。我试图搜索每个节点寻找该元素并返回元素的值。
答案 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()"/>