我发布到一个网页,我被告知将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。
提前致谢 戴夫
答案 0 :(得分:3)
我永远不会看到这种用法,但有点像:
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());
答案 1 :(得分:1)
我强烈怀疑是否有内置功能来实现这一目标,但编写代码并不难。我将使用一个递归方法来检查节点的子节点,使用表示树中节点位置的字符串前缀来调用自身。在方法之外维护列表或字典或任何最适合您的需求,当您遇到带有文本数据的节点时,将前缀+标记和值附加到列表中。然后,通过该列表并以查询字符串格式加入它们将是微不足道的。但要注意逃避&符号和其他保留字符。
答案 2 :(得分:0)
这看起来很疯狂,我希望你的XML数据不是很长......如果查询字符串结束时间很长,你可能会遇到问题。
我不明白为什么你不能做HTTP-POST,将content-type设置为'text / xml',只是发布原始XML数据。