URL XML 的参数

URL Parameter to XML

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

例如,我有一个带有 URL-Parmeter 的字符串:

"firsteName=John&lastName=Doe&birthDate=1970-01-01&..."

现在我想将字符串转换为 XML,例如:

<root>
   <firstName>John</firstName>
   <lastName>Doe</lastName>
   <birthDate>1970-01-01</birthDate>
   ...
</root>

我尝试用 XPath 对字符串进行标记化,但结果不是预期的。

输入的字符串如下XML:

<Response>
   <query> 
    firsteName=John&amp;lastName=Doe&amp;birthDate=1970-01-01    
   </query>
</Response>

我在 XML 上尝试了以下 XPath:

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

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

使用当前的 XPath 进行分词很容易:

tokenize($querystring,'&amp;')

生成一个字符串序列,可以使用 substring-before($avs,'=') 和 `substring-after($avs,'=').

从每个字符串中提取名称和值

构建您希望 return 的元素需要比 XPath 更强大的东西。在 XQuery 中,鉴于 $querystring 包含您要解析的字符串,以下将 return 您想要的 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' 的拼写错误。我将把参数名称的拼写更正等改进留作 reader.

的练习。