【问题标题】:Converting a string as a nodelist in xsl将字符串转换为 xsl 中的节点列表
【发布时间】:2010-10-18 13:13:19
【问题描述】:

我目前有一个字符串 (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)">

是否可以将字符串转换为另一个具有 ahs NodeList 属性的变量?还是有这个?

更新:我目前有一个使用 XML 调用 XSL 的 JSP。 JSP 页面接受传递给 XSL 页面的字符串。该字符串表示 XML 中的一个元素。我正在尝试搜索每个节点以查找该元素并返回该元素的值。

【问题讨论】:

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

标签: xml xslt


【解决方案1】:

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

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

如果字符串是静态定义的并且它表示一个格式良好的 XML 片段,则可以将其指定为 &lt;xsl:variable&gt;&lt;xsl:param&gt; 指令的主体,并使用 @ 转换为常规节点集987654323@特定供应商提供的扩展功能,如@Alejandro's answer中更详细地显示。

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

【讨论】:

  • 字符串是JSP传来的参数,我可以在JSP中声明为节点吗?这个想法是允许用户在 xml 文件中搜索特定元素
  • @Hammer:请更新/重新编写问题并提供所有详细信息。如果定义了完整的问题,几乎可以用 XSLT 完成任何事情。
【解决方案2】:

您的样式表中有 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>

【讨论】:

    【解决方案3】:

    对于 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()"/> 
    

    【讨论】:

      猜你喜欢
      • 2014-11-08
      • 1970-01-01
      • 2011-08-28
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多