代码之家  ›  专栏  ›  技术社区  ›  user3916125

RestSharp编辑xml文件的一个元素

  •  1
  • user3916125  · 技术社区  · 11 年前

    对于我正在使用的API的文档,说明如下:

    To edit an existing resource: GET the full XML file for the resource you want to change (/api/customers/7), edit its content as needed, then PUT the whole XML file back to the same URL again.
    

    现在我的问题是,如果我只想编辑XML文件中的一个元素(许多元素中的一种),RestSharp中是否有任何函数允许我只编辑那个元素,而不反序列化整个XML?

    例如,我的XML:

    <?xml version="1.0" encoding="UTF-8"?>
    <prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
    <customer>
        <id><![CDATA[1]]></id>
        <id_default_group xlink:href="http://heatherfazelinia.com/api/groups/3"><![CDATA[3]]></id_default_group>
        <id_lang xlink:href="http://heatherfazelinia.com/api/languages/1"><![CDATA[1]]></id_lang>
        <newsletter_date_add><![CDATA[2013-12-13 08:19:15]]></newsletter_date_add>
        <ip_registration_newsletter></ip_registration_newsletter>
        <last_passwd_gen><![CDATA[2014-06-20 16:56:30]]></last_passwd_gen>
        <secure_key><![CDATA[6a9b9eab95448d74a026b869d8cd723e]]></secure_key>
        <deleted><![CDATA[0]]></deleted>
        <passwd><![CDATA[6028853eb1033578f7432015042fa486]]></passwd>
        <lastname><![CDATA[DOE]]></lastname>
        <firstname><![CDATA[John]]></firstname>
        <email><![CDATA[pub@prestashop.com]]></email>
        <id_gender><![CDATA[1]]></id_gender>
        <birthday><![CDATA[1970-01-15]]></birthday>
        <newsletter><![CDATA[1]]></newsletter>
        <optin><![CDATA[1]]></optin>
        <website></website>
        <company></company>
        <siret></siret>
        <ape></ape>
        <outstanding_allow_amount><![CDATA[0.000000]]></outstanding_allow_amount>
        <show_public_prices><![CDATA[0]]></show_public_prices>
        <id_risk><![CDATA[0]]></id_risk>
        <max_payment_days><![CDATA[0]]></max_payment_days>
        <active><![CDATA[1]]></active>
        <note></note>
        <is_guest><![CDATA[0]]></is_guest>
        <id_shop><![CDATA[1]]></id_shop>
        <id_shop_group><![CDATA[1]]></id_shop_group>
        <date_add><![CDATA[2014-08-01 13:20:37]]></date_add>
        <date_upd><![CDATA[2014-08-01 13:20:37]]></date_upd>
    <associations>
    <groups node_type="group">
        <group xlink:href="http://heatherfazelinia.com/api/groups/3">
        <id><![CDATA[3]]></id>
        </group>
    </groups>
    </associations>
    </customer>
    </prestashop>
    

    我已经找到了如何反序列化特定值,例如:“firstname”和“lastname”。

    但我目前的问题是:如果我只想用PUT请求编辑该XML的“firstname”,我是否需要反序列化和编辑整个XML?或者RestSharp中有什么功能可以帮助我,我可以直接让它只编辑“firstname”元素?

    谢谢

    1 回复  |  直到 11 年前
        1
  •  0
  •   Yuval Itzchakov    11 年前

    RestSharp 不是序列化/反序列化框架。它是一个 “用于.NET的简单REST和HTTP API客户端” 它确实具有开箱即用的特性,例如将xml/json反序列化为适当的对象(使用json.NET等第三方框架)。

    因此,它不能满足您的要求,您必须反序列化整个xml并更改所需的属性。

    你需要做的事情可以很容易地用 LINQ 2 XML :

    //Assuming you get your xml as a string:
    var xml = XElement.Load(yourXmlString);
    
    var firstName = xml.Element("customer").Element("firstname");
    var lastName = xml.Element("customer").Element("lastname");
    
    firstName.Value = "firstChange";
    lastName.Value = "secondChange";
    
    var returnedXml = xml.ToString();
    

    当然,您必须添加无效性检查、异常处理等。

    推荐文章