是否可以将URL参数转换为XML。
示例,我有一个带有URL-Parmeter的字符串:
"firsteName=John&lastName=Doe&birthDate=1970-01-01&..."
现在我想将String转换为XML:
<root>
<firstName>John</firstName>
<lastName>Doe</lastName>
<birthDate>1970-01-01</birthDate>
...
</root>
我尝试用XPath标记字符串,但结果不是已经过期。
输入String位于以下XML中:
<Response>
<query>
firsteName=John&lastName=Doe&birthDate=1970-01-01
</query>
</Response>
我在XML上尝试了以下XPath:
fn:tokenize(/Response/query/, '&')
有没有办法用xslt或xpath做到这一点?
答案 0 :(得分:0)
使用当前XPath进行标记很简单:
tokenize($querystring,'&')
生成一个字符串序列,每个字符串都可以使用substring-before($avs,'=')
和`substring-after($ avs,'=')提取名称和值。
构造要返回的元素需要比XPath更强大的功能。在XQuery中,假设$querystring
包含您要解析的字符串,以下内容将返回您想要的root
元素:
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 }
}
这里元素构造函数是唯一不是纯XPath 3.0的东西。
在XSLT(2.0或3.0)中,
<xsl:element name="root">
<xsl:for-each select="tokenize($querystring,'&')">
<xsl:variable name="name" select="substring-before(.,'=')"/>
<xsl:variable name="value" select="substring-after(.,'=')"/>
<xsl:element name="{$name}">
<xsl:value-of select="$value"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
XQuery和XSLT都产生了
<root>
<firsteName>John</firsteName>
<lastName>Doe</lastName>
<birthDate>1970-01-01</birthDate>
</root>
,它与您所说的不需要更正查询字符串中'firstName'拼写错误的示例输出不同。我将保留参数名称的拼写更正等改进作为读者练习。