草庐IT

c# - 读取 xml 文档并更新所有字段 c#

coder 2024-07-04 原文

我正在尝试读取 xml 文件并更新我的 xml 的所有值

<adf>
    <prospect>
        <requestdate>2015-10-29 07-38-22</requestdate>
        <id sequence="1" source="admin.ss.com">admin.ss.com</id>
        <vehicle interest="buy" status="">
            <id sequence="1" source=""></id>
            <year></year>
            <make></make>
            <model>camry</model>
            <vin></vin>
            <stock></stock>
            <trim></trim>
        </vehicle>
        <customer>
            <contact primarycontact="1">
                <name part="first">Jessica</name>
                <name part="last">Sonntag</name>
                <email>js@test.com</email>
                <phone type="phone" time="day">555-585-5555</phone>
                <address>
                    <street line="1"></street>
                    <city></city>
                    <regioncode></regioncode>
                    <postalcode></postalcode>
                    <country></country>
                </address>
            </contact>
            <comments>Vehicle Year: 2011 Comments: </comments>
        </customer>
        <provider>
            <name part="full">ST</name>
            <service> Engine Marketing</service>
            <phone>1-866-572-3952</phone>
        </provider>
    </prospect>
</adf>

所以我选择如下节点

 var items = (from item in xmlDoc.Descendants("requestdate")
                         select item).ToList();

然后我只能更新 requestdata 标签值,所以我是否必须对所有标签重复相同的值,或者是否有任何好的方法来完成此操作。

问候

最佳答案

有一种简单的方法可以做到这一点。这是一颗隐藏的 gem 。大多数人可能不知道这一点。此功能出现在 VS2013 中,称为“将 XML 粘贴为类”。

  1. 保存您的 xml(例如:MyXml.XML)
  2. 创建一个新的控制台项目
  3. 在 Visual Studio 中打开 Xml
  4. 复制xml的所有内容(Ctl+A,Ctl+C)
  5. 向您的项目添加一个新类。你可以给任何你喜欢的名字。
  6. 转到“编辑”>“选择性粘贴”>“将 XML 粘贴为类”。
  7. 向您的项目添加另一个类。然后向该类添加以下两个方法。

      public static string Serialise<T>(T serialisableObject)
      {
        var doc = new XmlDocument();
        using (var stream = new StringWriter())
        {
            var settings = new XmlWriterSettings();
            settings.OmitXmlDeclaration = true;
    
            XmlWriter xmlWriter = XmlWriter.Create(stream, settings);
            var ns = new XmlSerializerNamespaces();
            ns.Add("", "");
    
            var xmlSerializer = new XmlSerializer(typeof(T));
            xmlSerializer.Serialize(xmlWriter, serialisableObject, ns);
            doc.LoadXml(stream.ToString());
        }
        return doc.InnerXml;
    }
    
    public static T Deserialise<T>(string xml)
    {
        T list;
        using (var reader = new StringReader(xml))
        {
            var serialiser = new XmlSerializer(typeof(T));
            list = (T)serialiser.Deserialize(reader);
        }
        return list;
    }
    

然后在您的控制台应用程序中使用 Main 方法;添加这个。

            var myObj = new adf();
            myObj.prospect =  new adfProspect();
            myObj.prospect.customer =  new adfProspectCustomer(){comments = "dgsrtetetete"};
            //populate all fields.....

            var xml = MySerializer.Serialise(myObj);
            File.WriteAllText(@"C:\myNewXml.xml", xml);

就是这样。现在你可以用同样的方式将一个 xml 对象反序列化到你的类中。

关于c# - 读取 xml 文档并更新所有字段 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33803561/

有关c# - 读取 xml 文档并更新所有字段 c#的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  3. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  4. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  5. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  6. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  7. Ruby 写入和读取对象到文件 - 2

    好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信

  8. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  9. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  10. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

随机推荐