Xml 如何使用xsl:variable作为另一个变量';姓名

Xml 如何使用xsl:variable作为另一个变量';姓名,xml,xslt,Xml,Xslt,我要做的是将xsl变量的值设置为新变量的名称 我的问题是: xml文件中有一个条目(我无法控制),它是一长串搜索值。它看起来像这样: jobSearch=12345;nameSearch=Joe;colorSearch=Blue 问题是这些术语并不总是以相同的顺序出现,或者根本不出现,有时可能是: colorSearch=Blue;jobSearch=12345;nameSearch=Joe 甚至只是: jobSearch=12345 我可以将字符串拆分为单独的组件,但我似乎不知道如何将搜

我要做的是将xsl变量的值设置为新变量的名称

我的问题是:

xml文件中有一个条目(我无法控制),它是一长串搜索值。它看起来像这样:

jobSearch=12345;nameSearch=Joe;colorSearch=Blue
问题是这些术语并不总是以相同的顺序出现,或者根本不出现,有时可能是:

colorSearch=Blue;jobSearch=12345;nameSearch=Joe
甚至只是:

jobSearch=12345
我可以将字符串拆分为单独的组件,但我似乎不知道如何将搜索类型链接到搜索值。我希望稍后在xsl中按搜索类型调用这些变量。我原以为a可以在调用模板循环中执行此操作,但当我离开时,变量将超出范围。任何帮助都将不胜感激。 多谢各位


编辑:我正在使用XSLT 1.0,并在稍后访问术语时希望创建一个键值对,正如Daniel Haley在1.0中所说的,您不能这样做。与其发明根本不存在的语言特性,不如告诉我们你想解决什么问题,我们可以告诉你如何解决它。

我想我理解你的问题;您试图为字符串中的每个“搜索类型”获取一个键值对,对吗?所以“colorSearch”=“blue”、“jobSearch”=“12345”和“nameSearch”=“Joe”。对吗

您没有指定XSLT的版本,因此下面的示例显示了两种方法。一种是通过创建可以稍后查询的XML。另一种是通过创建
地图
。第一种方法适用于XSLT2.0和3.0。第二种方法仅适用于XSLT 3.0。(我使用萨克森PE进行测试。)

XML输入

<example>jobSearch=12345;nameSearch=Joe;colorSearch=Blue</example>
<results>
   <search-type name="jobSearch" method1value="12345" method2value="12345"/>
   <search-type name="nameSearch" method1value="Joe" method2value="Joe"/>
   <search-type name="colorSearch" method1value="Blue" method2value="Blue"/>
</results>
jobSearch=12345;名称搜索=乔;颜色搜索=蓝色
XSLT(显示如何创建键值对,然后引用它们。)


输出

<example>jobSearch=12345;nameSearch=Joe;colorSearch=Blue</example>
<results>
   <search-type name="jobSearch" method1value="12345" method2value="12345"/>
   <search-type name="nameSearch" method1value="Joe" method2value="Joe"/>
   <search-type name="colorSearch" method1value="Blue" method2value="Blue"/>
</results>


我担心您可能走错了方向,因为这样的事情在XSLT中是不可能的。如果你对你想要实现的目标(而不仅仅是“如何实现”)给出更多的细节,那么我们可能会建议一种替代方法。非常感谢。您能否澄清“稍后在我的xsl中通过搜索类型调用这些变量”的含义另外,请说明您使用的是哪个版本的XSLT。“在以后寻找键值对时访问这些术语方面”,这并不意味着什么。您已经有一个键值对数组。唯一的问题是,访问当前形式的数组并不方便。所以问题是什么效率更高:花点精力把数组转换成更有用的东西,或者让它保持原样,看看如何在你需要的时候从中提取你需要的东西。Michael,你很在行。我忙于把它变成一个更有用的形式,以至于我没有想到它已经在一个键值对中了。当我需要某个值时,我可以使用contains()来检查字符串是否存在,然后在后面提取该值。很好。我只是想澄清一下:我没有就哪一个更可取发表意见。我只是说,在我们形成这样的意见之前,我们需要了解它将如何被使用。是的,我认为它不是那样工作的,对不起。我更新了问题。谢谢。为了记录在案,我的回答是对一个完全不同的问题的回答。这正是我想要做的。不幸的是,我没有在问题中说明这一点,但我正在使用XSLT1.0。这个版本有可能吗?