Xml XSLT-在for each循环中查找变量元素
我有一个XML文档,正在转换为多个HTML文档。问题是,对于生成的每个文档,我需要在单独的XML文件集合中查找不同的节点 假设我的XML如下所示: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&
<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]">
注意:
,在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