首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >msxsl:node-set()未正确解析XML片段

msxsl:node-set()未正确解析XML片段
EN

Stack Overflow用户
提问于 2018-03-07 18:55:20
回答 1查看 80关注 0票数 0

我有以下场景。

代码语言:javascript
复制
<xsl:template match="/s0:NotChangableTemplate">
    <ns0:Root>
        <xsl:for-each select="s0:Element">
            <xsl:variable name="var" select="ext:MyCustomFunction(string(s0:Input/text()))" />

            <xsl:call-template name="MyTemplate">
                <xsl:with-param name="param" select="string($var)" />
            </xsl:call-template>
        </xsl:for-each>
    </ns0:Root>
</xsl:template>

<xsl:template name="MyTemplate">
    <xsl:param name="param" />

    <xsl:variable name="myVar">
        <xsl:value-of select="$param" disable-output-escaping="yes" />
    </xsl:variable>

    <xsl:for-each select="msxsl:node-set($myVar)/s0:Value">
        <xsl:copy-of select="self::node()" />
    </xsl:for-each>
</xsl:template>

模板/s0:NotChangableTemplate是生成的代码,我没有可能改变这一点。函数MyCustomFunction以字符串的形式返回下面的XML片段。

代码语言:javascript
复制
<s0:Value>'74024042','66111050','74024046','66110042','32060090'</s0:Value>
<s0:Value>'66111040','53260042','17439060','66111048','74024040'</s0:Value>
<s0:Value>'66110040','66110048','66110044','74024044','53283040'</s0:Value>
<s0:Value>'66111044','66111042','66111046','74024036','66110046'</s0:Value>
<s0:Value>'18235','17439058','53283038','53260036','66111038'</s0:Value>
<s0:Value>'74024038'</s0:Value>

MyTemplate中,我希望将其解析为一个树,并在其中导航。在这个伪函数中,我只是想将节点复制到输出XML中。但是找不到s0:Value节点。

如果我在变量中设置了片段修复,它就会起作用。

代码语言:javascript
复制
<xsl:template name="MyTemplate">
    <xsl:variable name="myVar">
        <s0:Value>'74024042','66111050','74024046','66110042','32060090'</s0:Value>
        <s0:Value>'66111040','53260042','17439060','66111048','74024040'</s0:Value>
        <s0:Value>'66110040','66110048','66110044','74024044','53283040'</s0:Value>
        <s0:Value>'66111044','66111042','66111046','74024036','66110046'</s0:Value>
        <s0:Value>'18235','17439058','53283038','53260036','66111038'</s0:Value>
        <s0:Value>'74024038'</s0:Value>
    </xsl:variable>

    <xsl:for-each select="msxsl:node-set($myVar)/s0:Value">
        <xsl:copy-of select="self::node()" />
    </xsl:for-each>
</xsl:template>

我可以在MyTemplate中进行哪些更改,使其与使用固定变量值的示例中的工作方式相同?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-03-07 19:58:06

msxsl:node-set()的文档可以在以下位置找到:

Support for the msxsl:node-set() Function

文档中没有建议它解析包含词法XML的字符串以生成节点树;我不确定您是从哪里得到这个想法的。

XSLT 1.0没有提供调用XML解析器的机制(XSLT 3.0提供了parse-xml()函数)。但是msxsl允许你调用Javascript来做这些事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49150172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档