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&lastName=Doe&birthDate=1970-01-01
</query>
</Response>
我在 XML 上尝试了以下 XPath:
fn:tokenize(/Response/query/, '&')
有没有办法用 xslt 或 xpath 做到这一点?
使用当前的 XPath 进行分词很容易:
tokenize($querystring,'&')
生成一个字符串序列,可以使用 substring-before($avs,'=')
和 `substring-after($avs,'=').
从每个字符串中提取名称和值
构建您希望 return 的元素需要比 XPath 更强大的东西。在 XQuery 中,鉴于 $querystring
包含您要解析的字符串,以下将 return 您想要的 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' 的拼写错误。我将把参数名称的拼写更正等改进留作 reader.
的练习。
是否可以将 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&lastName=Doe&birthDate=1970-01-01
</query>
</Response>
我在 XML 上尝试了以下 XPath:
fn:tokenize(/Response/query/, '&')
有没有办法用 xslt 或 xpath 做到这一点?
使用当前的 XPath 进行分词很容易:
tokenize($querystring,'&')
生成一个字符串序列,可以使用 substring-before($avs,'=')
和 `substring-after($avs,'=').
构建您希望 return 的元素需要比 XPath 更强大的东西。在 XQuery 中,鉴于 $querystring
包含您要解析的字符串,以下将 return 您想要的 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' 的拼写错误。我将把参数名称的拼写更正等改进留作 reader.
的练习。