[英]Converting XML document to URL encoded query string for HTTP POST - C#
我发布到一个网页,我被告知将XML作为它的正文。 事实证明它真正需要的是看起来像URL编码的CGI查询字符串:
<FIRST>
<ELEMENT1>Value1</ELEMENT1>
<ELEMENT2>Value1</ELEMENT2>
<ELEMENT3>Value1</ELEMENT3>
</FIRST>
<SECOND>
<ELEMENT1>Value1</ELEMENT1>
<ELEMENT2>Value1</ELEMENT2>
</SECOND>
需要传播为
FIRST_ELEMENT1 = VALUE1&FIRST_ELEMENT2 = VALUE2&FIRST_ELEMENT3 = VALUE3&SECOND_ELEMENT1 = VALUE1&SECOND_ELEMENT2 = VALUE2
第三方告诉我这是一种常见的用法,虽然我之前没有看到它(作为提交XML的方法),很明显该服务旨在采用带有表单作为数据源的HTML POST。
虽然我可以看到如何编写转换,但我想知道.Net框架中是否有一个方法可以实现这种转换。 此项目提供了.Net 3.5。
在此先感谢戴夫
我从未见过这种用法,但有点像:
var query = string.Join("&",(
from parent in XElement.Parse(xml).Elements()
from child in parent.Elements()
select HttpUtility.UrlEncode(parent.Name.LocalName) + "_"
+ HttpUtility.UrlEncode(child.Name.LocalName) + "="
+ HttpUtility.UrlEncode(child.Value)).ToArray());
我强烈怀疑是否有任何内置功能可以实现这一点,但编写代码并不难。 我将使用一个递归方法来检查节点的子节点,使用表示树中节点位置的字符串前缀来调用自身。 在方法之外维护列表或字典或任何最适合您的需求,当您遇到带有文本数据的节点时,将前缀+标记和值附加到列表中。 然后,通过该列表并以查询字符串格式加入它们将是微不足道的。 但要注意避开&符号和其他保留字符。
这看起来很疯狂,我希望你的XML数据不是很长......如果查询字符串结束太久,你可能会遇到问题。
我不明白为什么你不能做HTTP-POST,将content-type设置为'text / xml',只是发布原始XML数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.