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

是否可以将URL参数转换为XML

例如,我有一个带有URL参数的字符串:

"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,'&amp;')
生成一个字符串序列,可以使用($avs,'=')之前的
子字符串和($avs,'=')之后的
子字符串从每个字符串中提取名称和值

构造希望返回的元素需要比XPath更强大的功能。在XQuery中,假设
$querystring
包含要分析的字符串,则以下内容将返回所需的
元素:

return element root {
  for $avs in tokenize($querystring,'&amp;')
  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,'&amp;')
生成一个字符串序列,可以使用($avs,'=')之前的
子字符串和($avs,'=')之后的
子字符串从每个字符串中提取名称和值

构造希望返回的元素需要比XPath更强大的功能。在XQuery中,假设
$querystring
包含要分析的字符串,则以下内容将返回所需的
元素:

return element root {
  for $avs in tokenize($querystring,'&amp;')
  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构造是元素构造函数。(所以:不,没有重要或有趣的原因。)