XML的URL参数
是否可以将URL参数转换为XML 例如,我有一个带有URL参数的字符串:XML的URL参数,xml,xslt,xpath,url-parameters,Xml,Xslt,Xpath,Url Parameters,是否可以将URL参数转换为XML 例如,我有一个带有URL参数的字符串: "firsteName=John&lastName=Doe&birthDate=1970-01-01&..." 现在,我想将字符串转换为XML,如下所示: <root> <firstName>John</firstName> <lastName>Doe</lastName> <birthDate>1970-0
"firsteName=John&lastName=Doe&birthDate=1970-01-01&..."
现在,我想将字符串转换为XML,如下所示:
<root>
<firstName>John</firstName>
<lastName>Doe</lastName>
<birthDate>1970-01-01</birthDate>
...
</root>
使用xslt或xpath有没有办法做到这一点?使用当前xpath标记化很容易:
tokenize($querystring,'&')
生成一个字符串序列,可以使用($avs,'=')之前的子字符串和($avs,'=')之后的
子字符串从每个字符串中提取名称和值
构造希望返回的元素需要比XPath更强大的功能。在XQuery中,假设$querystring
包含要分析的字符串,则以下内容将返回所需的根
元素:
return element root {
for $avs in tokenize($querystring,'&')
return for $name in substring-before($avs,'=')
return for $val in substring-after($avs,'=')
return element { $name } { $val }
}
在这里,元素构造函数是唯一不是纯XPath3.0的东西
在XSLT(2.0或3.0)中
XQuery和XSLT都产生
<root>
<firsteName>John</firsteName>
<lastName>Doe</lastName>
<birthDate>1970-01-01</birthDate>
</root>
约翰
雌鹿
1970-01-01
这与您所说的示例输出不同,您希望不更正查询字符串中“firstName”的拼写错误。我将把诸如参数名称拼写更正之类的改进留给读者作为练习。使用当前XPath标记很容易:
tokenize($querystring,'&')
生成一个字符串序列,可以使用($avs,'=')之前的子字符串和($avs,'=')之后的
子字符串从每个字符串中提取名称和值
构造希望返回的元素需要比XPath更强大的功能。在XQuery中,假设$querystring
包含要分析的字符串,则以下内容将返回所需的根
元素:
return element root {
for $avs in tokenize($querystring,'&')
return for $name in substring-before($avs,'=')
return for $val in substring-after($avs,'=')
return element { $name } { $val }
}
在这里,元素构造函数是唯一不是纯XPath3.0的东西
在XSLT(2.0或3.0)中
XQuery和XSLT都产生
<root>
<firsteName>John</firsteName>
<lastName>Doe</lastName>
<birthDate>1970-01-01</birthDate>
</root>
约翰
雌鹿
1970-01-01
这与您所说的示例输出不同,您希望不更正查询字符串中“firstName”的拼写错误。我将把修改参数名称的拼写等作为练习留给读者。您能编辑您的问题以显示您已经尝试过的代码吗?谢谢。当你在Linux OSC中时,你可以编辑你的问题来显示你已经尝试过的代码吗?谢谢。在Linux操作系统中很容易。Michael:有什么理由嵌套FLWOR表达式,而不是对
$name
和$val
使用let
?请原谅格式化,但是:对于tokenize($querystring,“&;”)中的$avs,让$name:=前面的子字符串($avs,“=”)让$val:=后面的子字符串($avs,“=”)返回元素{$name}{$val}
@joewiz:我试图尽可能长时间地留在XPath中,因此,我可以说表达式中唯一的非XPath构造是元素构造函数。(所以:没有,没有重要或有趣的原因。)Michael:有什么原因让你嵌套FLWOR表达式,而不是对$name
和$val
使用let
?请原谅格式化,但是:对于tokenize($querystring,“&;”)中的$avs,让$name:=前面的子字符串($avs,“=”)让$val:=后面的子字符串($avs,“=”)返回元素{$name}{$val}
@joewiz:我试图尽可能长时间地留在XPath中,因此,我可以说表达式中唯一的非XPath构造是元素构造函数。(所以:不,没有重要或有趣的原因。)