URL参数到XML

时间:2017-10-13 14:43:06

标签: xml xslt xpath url-parameters

是否可以将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&amp;lastName=Doe&amp;birthDate=1970-01-01    
   </query>
</Response>

我在XML上尝试了以下XPath:

fn:tokenize(/Response/query/, '&')

有没有办法用xslt或xpath做到这一点?

1 个答案:

答案 0 :(得分:0)

使用当前XPath进行标记很简单:

tokenize($querystring,'&amp;')

生成一个字符串序列,每个字符串都可以使用substring-before($avs,'=')和`substring-after($ avs,'=')提取名称和值。

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

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 }
}

这里元素构造函数是唯一不是纯XPath 3.0的东西。

在XSLT(2.0或3.0)中,

<xsl:element name="root">
  <xsl:for-each select="tokenize($querystring,'&amp;')">
    <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'拼写错误的示例输出不同。我将保留参数名称的拼写更正等改进作为读者练习。