【问题标题】:Passing CDATA in a parameter with XML-RPC.NET使用 XML-RPC.NET 在参数中传递 CDATA
【发布时间】:2013-12-22 09:28:20
【问题描述】:

我想使用包含以下片段的 XML 请求调用 XML-RPC Web 服务的方法:

<member>
  <name>filters</name>
  <value><![CDATA[
    <filterinstances>
      <filterinstance type="date" comparison="equals">today</filterinstance>
    </filterinstances>
  ]]></value>
</member>    

为此,我使用 XML-RPC.net 代理并将过滤器参数作为字符串传递:

IGetReportData proxy = XmlRpcProxyGen.Create<IGetReportData>();

proxy.Url = "<* my url >*";
proxy.KeepAlive = false;
proxy.UseStringTag = false;

ReportDataParams rp = new ReportDataParams();
rp.show = "3";
rp.filters = "<![CDATA[<filterinstances><filterinstance type=\"date\" comparison=\"equals\">today</filterinstance></filterinstances>]]>";

string s = proxy.GetReportData("test", rp);

ReportParams 被定义为一个结构体。

public struct ReportDataParams
{
    public string show;
    public string filters;
}

问题在于 XML-RPC.Net 解码过滤器字符串中的 XML。以下片段被发送到服务器:

      <member>
        <name>filters</name>
        <value>
          <string>&lt;![CDATA[&lt;filterinstances&gt;&lt;filterinstance type="date" comparison="equals"&gt;today&lt;/filterinstance&gt;&lt;/filterinstances&gt;]]&gt;</string>
        </value>
      </member>

有没有办法将 CDATA xml 片段作为参数逐字传递给 XML-RPC.Net?

【问题讨论】:

    标签: c# .net xml xml-rpc xml-rpc.net


    【解决方案1】:

    我也遇到过类似的问题。对我来说,解决方案是去掉所有 CDATA 的东西。在您的示例中,您只需通过:

    <filterinstances><filterinstance type=\"date\" comparison=\"equals\">today</filterinstance></filterinstances>
    

    【讨论】:

    • 谢谢!不幸的是,当我省略 CDATA 标记时,调用失败。这是因为在这种情况下,参数中的 xml 数据被视为 xml 请求的一部分。 CDATA 阻止了这种情况,并将 xml 部分作为文字传递。
    • @Rudolf 如果您有成功调用的示例,请尝试使用 Fiddler 并查看实际通过网络发送的内容。这对我也有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多