Xml XSLT-在for each循环中查找变量元素

Xml XSLT-在for each循环中查找变量元素,xml,xslt,xslt-2.0,Xml,Xslt,Xslt 2.0,我有一个XML文档,正在转换为多个HTML文档。问题是,对于生成的每个文档,我需要在单独的XML文件集合中查找不同的节点 假设我的XML如下所示: <index> <item> <species>Dog</species> <tagName>canine</tagName> </item> <item> <species>Cat</species&

我有一个XML文档,正在转换为多个HTML文档。问题是,对于生成的每个文档,我需要在单独的XML文件集合中查找不同的节点

假设我的XML如下所示:

<index>
  <item>
    <species>Dog</species>
    <tagName>canine</tagName>
  </item>
  <item>
    <species>Cat</species>
    <tagName>feline</tagName>
  </item>
<index>
<xsl:template match="/">
  <xsl:for-each select="index/item">
    <xsl:result-document method="xml" href="{species}.html">
      <xsl:for-each select="collection('index.xml')//canine">
        <xsl:value-of select=".">
      </xsl:for-each>
    </xsl:result-document>
  </xsl:for-each>
</xsl:template>

狗
犬的
猫
猫科动物
我收集了几十个文件,其中有“犬科动物”和“猫科动物”的元素散布在各处。我需要为每个文档调用正确的一个

我的XSLT如下所示:

<index>
  <item>
    <species>Dog</species>
    <tagName>canine</tagName>
  </item>
  <item>
    <species>Cat</species>
    <tagName>feline</tagName>
  </item>
<index>
<xsl:template match="/">
  <xsl:for-each select="index/item">
    <xsl:result-document method="xml" href="{species}.html">
      <xsl:for-each select="collection('index.xml')//canine">
        <xsl:value-of select=".">
      </xsl:for-each>
    </xsl:result-document>
  </xsl:for-each>
</xsl:template>

我正在寻找一种方法,将“//cange”转换为一个变量,以便它在Dog文档中查找,在Cat文档中查找,等等

我想不出怎么做。谁能给我指出正确的方向吗?我一直在处理变量,但我找不到任何有效的方法

我正在寻找一种方法,将“//犬齿”转换为一个变量,以便 在Dog文档中查找
,在Cat文档中查找它 查找

尝试以下方法:

<xsl:for-each select="collection('index.xml')//*[name()=current()/tagName]">

注意

  • 最好使用按名称选择元素- 但显然,当你的目标是一个集合时,你不能这样做 (?);
  • 我不确定您的收藏是否定义正确。但这将是另一个问题的主题
  • 我正在寻找一种方法,将“//犬齿”转换为一个变量,以便 在Dog文档中查找
    ,在Cat文档中查找它 查找

    尝试以下方法:

    <xsl:for-each select="collection('index.xml')//*[name()=current()/tagName]">
    
    
    
    注意

  • 最好使用按名称选择元素- 但显然,当你的目标是一个集合时,你不能这样做 (?);
  • 我不确定您的收藏是否定义正确。但这将是另一个问题的主题

  • 根据我们没有显示的代码,您可能无法使用XSLT
    current()
    函数

    此代码不使用当前()


    根据我们没有显示的代码,您可能无法使用XSLT
    current()
    函数

    此代码不使用当前()


    我不明白你的最终目标。一个XML文件生成多个HTML文件,现在您希望HTML文件引用回XML文件吗?请出示想要的结果。嗨,冻糕。这些文件汇集了数百种不同的“物种”,分布在数十个不同的文件中。其目的是将每个物种的所有值的列表输出到其单独的物种文件中。我应该在帖子中添加一个例子来澄清吗?我不明白你的最终目标。一个XML文件生成多个HTML文件,现在您希望HTML文件引用回XML文件吗?请出示想要的结果。嗨,冻糕。这些文件汇集了数百种不同的“物种”,分布在数十个不同的文件中。其目的是将每个物种的所有值的列表输出到其单独的物种文件中。我是否应该在文章中添加一个示例来澄清?什么“我们没有显示的代码”会禁用XSLT current()函数的使用?@michael.hor257k该代码可能足够复杂——例如,具有嵌套的
    指令,因此
    current()函数
    根本不是
    元素。@DimitreNovatchev谢谢!current()完成了本例中特定问题的处理,但您的解决方案非常优雅,并针对我遇到的另一个问题单击了一些内容。我非常感谢您。什么“我们没有显示的代码”会禁用XSLT current()函数的使用?@michael.hor257k该代码可能足够复杂——例如具有嵌套的
    指令,因此
    current()
    根本不是
    元素。@DimitreNovatchev谢谢!current()完成了本例中特定问题的处理,但您的解决方案非常优雅,并针对我遇到的另一个问题单击了一些内容。我非常感谢你,谢谢你!我一边学习XSLT,还没意识到current()在引用集合时可以这样工作。这完美地解决了我眼前的问题。不幸的是,我遇到了一个新的障碍,因为我现在无法解决如何匹配模板。如果我有一个后续问题要问,我应该作为一个单独的问题发布吗?我是新来的。再次非常感谢您的帮助。@LiamMcD我不确定您所说的“匹配此模板”是什么意思。在其他地方,我需要找到包含有问题的标记的每个段落(已包装在中)。在该段中,我需要突出显示该标记的每个值。当我知道标签名时,我只是使用//p[.//candige]来选择段落。然后我对它应用了各种模板,其中一个是匹配“犬科”的突出显示规则。虽然您的解决方案对于我的原始问题非常出色,但我无法确定如何匹配*[name()=current()/tagName]以应用模板。这有意义吗?我不认为您可以这样做,因为在一个模板中定义的变量将不能用于另一个模板(除非您将其作为参数传递)。无论如何,我建议您发布一个新问题,因为我无法从您的描述中获得确切的上下文,而上下文在XSLT中至关重要。谢谢!我一边学习XSLT,还没意识到current()在引用集合时可以这样工作。这完美地解决了我眼前的问题。不幸的是,我遇到了一个新的障碍,因为我现在无法解决如何匹配模板。如果我有一个后续问题要问,我应该作为一个单独的问题发布吗?我是新来的。再次非常感谢您的帮助。@LiamMcD我不是s