繁体   English   中英

将XML文档转换为HTTP编码的URL编码查询字符串 - C#

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM