C#将xml文件拆分成多个文件并映射 [英] C# Split xml file into multiple files and map

查看:94
本文介绍了C#将xml文件拆分成多个文件并映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


我需要将以下数据映射到wcf服务中的响应字段(下面是xml)。从wcf的请求字段之一我得到了一个巨大的字符串数据。该字符串是一个xml数据(转换标签后的xml以下)。我需要通过选择基于标记名的数据来映射到wcfschema中的响应字段(每个字段按
xml节点)。如何从重复记录中选择和发送单个响应。(我需要根据节点选择数据,并且必须发送到服务中的响应字段。)由于存在多个记录,我想从每个记录中选择
记录并将数据作为每个xml记录的单个响应发送。输出应包含4个单独的记录/ xml。



  

< AgressoQE>

  &NBSP; < _recno> 0< / _ recno>

  &NBSP; < _section> D< / _ section>

  &NBSP; < tab> A< / tab>

  &NBSP; <地址/>

  &NBSP; < address_type> 1< / address_type>

  &NBSP; < user_id> sss< / user_id>

  &NBSP; < date_from> 2017-09-18T00:00:00 + 01:00< / date_from>

  &NBSP; < resource_id> 1< / resource_id>

  &NBSP; < date_to> 2099-12-31T00:00:00 + 00:00< / date_to>

  &NBSP; < birth_date> 2000-01-01T00:00:00 + 00:00< / birth_date>

  &NBSP; < client> w< / client>

  &NBSP; < place />

  &NBSP; < province />< AgressoQE />


  < AgressoQE>

  &NBSP; < _recno> 0< / _ recno>

  &NBSP; < _section> D< / _ section>

  &NBSP; < tab> A< / tab>

  &NBSP; <地址/>

  &NBSP; < address_type> 1< / address_type>

  &NBSP; < user_id> sss< / user_id>

  &NBSP; < date_from> 2017-09-18T00:00:00 + 01:00< / date_from>

  &NBSP; < resource_id> 1< / resource_id>

  &NBSP; < date_to> 2099-12-31T00:00:00 + 00:00< / date_to>

  &NBSP; < birth_date> 2000-01-01T00:00:00 + 00:00< / birth_date>

  &NBSP; < client> w< / client>

  &NBSP; < place />

  &NBSP; < province />< AgressoQE />


< AgressoQE>

  &NBSP; < _recno> 0< / _ recno>

  &NBSP; < _section> D< / _ section>

  &NBSP; < tab> A< / tab>

  &NBSP; <地址/>

  &NBSP; < address_type> 1< / address_type>

  &NBSP; < user_id> sss< / user_id>

  &NBSP; < date_from> 2017-09-18T00:00:00 + 01:00< / date_from>

  &NBSP; < resource_id> 1< / resource_id>

  &NBSP; < date_to> 2099-12-31T00:00:00 + 00:00< / date_to>

  &NBSP; < birth_date> 2000-01-01T00:00:00 + 00:00< / birth_date>

  &NBSP; < client> w< / client>

  &NBSP; < place />

  &NBSP; < province />< AgressoQE />


< AgressoQE>

  &NBSP; < _recno> 0< / _ recno>

  &NBSP; < _section> D< / _ section>

  &NBSP; < tab> A< / tab>

  &NBSP; <地址/>

  &NBSP; < address_type> 1< / address_type>

  &NBSP; < user_id> sss< / user_id>

  &NBSP; < date_from> 2017-09-18T00:00:00 + 01:00< / date_from>

  &NBSP; < resource_id> 1< / resource_id>

  &NBSP; < date_to> 2099-12-31T00:00:00 + 00:00< / date_to>

  &NBSP; < birth_date> 2000-01-01T00:00:00 + 00:00< / birth_date>

  &NBSP; < client> w< / client>

  &NBSP; < place />

  &NBSP; < province />< AgressoQE />




问候,vishal

解决方案

Hi b vishal,


感谢您发布此处。


您的xml文件有问题。我做了一些改变。请尝试下面的xml代码。

< Root> 
< AgressoQE>
< _recno> 0< / _ recno>
< _section> D< / _ section>
< tab> A< / tab>
< address_type> 1< / address_type>
< user_id> sss< / user_id>
< date_from> 2017-09-18T00:00:00 + 01:00< / date_from>
< resource_id> 1< / resource_id>
< date_to> 2099-12-31T00:00:00 + 00:00< / date_to>
< birth_date> 2000-01-01T00:00:00 + 00:00< / birth_date>
< client> w< / client>
< / AgressoQE>

< AgressoQE>
< _recno> 0< / _ recno>
< _section> D< / _ section>
< tab> A< / tab>
< address_type> 1< / address_type>
< user_id> sss< / user_id>
< date_from> 2017-09-18T00:00:00 + 01:00< / date_from>
< resource_id> 1< / resource_id>
< date_to> 2099-12-31T00:00:00 + 00:00< / date_to>
< birth_date> 2000-01-01T00:00:00 + 00:00< / birth_date>
< client> w< / client>
< / AgressoQE>
< AgressoQE>
< _recno> 0< / _ recno>
< _section> D< / _ section>
< tab> A< / tab>
< address_type> 1< / address_type>
< user_id> sss< / user_id>
< date_from> 2017-09-18T00:00:00 + 01:00< / date_from>
< resource_id> 1< / resource_id>
< date_to> 2099-12-31T00:00:00 + 00:00< / date_to>
< birth_date> 2000-01-01T00:00:00 + 00:00< / birth_date>
< client> w< / client>
< / AgressoQE>
< AgressoQE>
< _recno> 0< / _ recno>
< _section> D< / _ section>
< tab> A< / tab>
< address_type> 1< / address_type>
< user_id> sss< / user_id>
< date_from> 2017-09-18T00:00:00 + 01:00< / date_from>
< resource_id> 1< / resource_id>
< date_to> 2099-12-31T00:00:00 + 00:00< / date_to>
< birth_date> 2000-01-01T00:00:00 + 00:00< / birth_date>
< client> w< / client>
< / AgressoQE>
< / root>


 static void Main(string [] args)
{
XDocument xml = XDocument .Load(@" New.xml"); //加载源xml
var xmls = xml.Root.Elements()。ToArray(); //拆分成元素

for(int i = 0; i< xmls.Length; i ++)
{
//将每个元素写入不同的文件
using(var file = File.CreateText(string.Format(" xml {0} .xml",i + 1)))
{
file.Write(xmls [i] .ToString() );
}
}
}


下面的图片是xml文件的内容。


xml1.xml




xml2.xml



xml3.xml



xml4.xml



最好的问候,


温迪


Hi,

I need to map following data to response fields in wcf service(below is xml).From one of the request field of wcf I am getting a huge string data.That string is a xml data(below xml after converting tags). I need to map to response field(each field as per xml node) in wcfschema by picking data based on tagname. How to pick and send as a single response from repeating record.(I need to pick the data based on node and has to be send to response field in service.) As multiple records are present i want to pick from each record and send the data as a single response from each xml record.Output should contain 4 seperate records/xml.

  

<AgressoQE>
    <_recno>0</_recno>
    <_section>D</_section>
    <tab>A</tab>
    <address />
    <address_type>1</address_type>
    <user_id>sss</user_id>
    <date_from>2017-09-18T00:00:00+01:00</date_from>
    <resource_id>1</resource_id>
    <date_to>2099-12-31T00:00:00+00:00</date_to>
    <birth_date>2000-01-01T00:00:00+00:00</birth_date>
    <client>w</client>
    <place />
    <province /><AgressoQE/>

  <AgressoQE>
    <_recno>0</_recno>
    <_section>D</_section>
    <tab>A</tab>
    <address />
    <address_type>1</address_type>
    <user_id>sss</user_id>
    <date_from>2017-09-18T00:00:00+01:00</date_from>
    <resource_id>1</resource_id>
    <date_to>2099-12-31T00:00:00+00:00</date_to>
    <birth_date>2000-01-01T00:00:00+00:00</birth_date>
    <client>w</client>
    <place />
    <province /><AgressoQE/>

<AgressoQE>
    <_recno>0</_recno>
    <_section>D</_section>
    <tab>A</tab>
    <address />
    <address_type>1</address_type>
    <user_id>sss</user_id>
    <date_from>2017-09-18T00:00:00+01:00</date_from>
    <resource_id>1</resource_id>
    <date_to>2099-12-31T00:00:00+00:00</date_to>
    <birth_date>2000-01-01T00:00:00+00:00</birth_date>
    <client>w</client>
    <place />
    <province /><AgressoQE/>

<AgressoQE>
    <_recno>0</_recno>
    <_section>D</_section>
    <tab>A</tab>
    <address />
    <address_type>1</address_type>
    <user_id>sss</user_id>
    <date_from>2017-09-18T00:00:00+01:00</date_from>
    <resource_id>1</resource_id>
    <date_to>2099-12-31T00:00:00+00:00</date_to>
    <birth_date>2000-01-01T00:00:00+00:00</birth_date>
    <client>w</client>
    <place />
    <province /><AgressoQE/>


Regards, vishal

解决方案

Hi b vishal,

Thank you for posting here.

There is something wrong with your xml file. I do some change. Please try the code with xml below.

<Root>
	<AgressoQE>
    <_recno>0</_recno>
    <_section>D</_section>
    <tab>A</tab>
    <address_type>1</address_type>
    <user_id>sss</user_id>
    <date_from>2017-09-18T00:00:00+01:00</date_from>
    <resource_id>1</resource_id>
    <date_to>2099-12-31T00:00:00+00:00</date_to>
    <birth_date>2000-01-01T00:00:00+00:00</birth_date>
    <client>w</client>    
</AgressoQE>

<AgressoQE>
    <_recno>0</_recno>
    <_section>D</_section>
    <tab>A</tab>
    <address_type>1</address_type>
    <user_id>sss</user_id>
    <date_from>2017-09-18T00:00:00+01:00</date_from>
    <resource_id>1</resource_id>
    <date_to>2099-12-31T00:00:00+00:00</date_to>
    <birth_date>2000-01-01T00:00:00+00:00</birth_date>
    <client>w</client>    
</AgressoQE>
<AgressoQE>
    <_recno>0</_recno>
    <_section>D</_section>
    <tab>A</tab>
    <address_type>1</address_type>
    <user_id>sss</user_id>
    <date_from>2017-09-18T00:00:00+01:00</date_from>
    <resource_id>1</resource_id>
    <date_to>2099-12-31T00:00:00+00:00</date_to>
    <birth_date>2000-01-01T00:00:00+00:00</birth_date>
    <client>w</client>    
</AgressoQE>
<AgressoQE>
    <_recno>0</_recno>
    <_section>D</_section>
    <tab>A</tab>
    <address_type>1</address_type>
    <user_id>sss</user_id>
    <date_from>2017-09-18T00:00:00+01:00</date_from>
    <resource_id>1</resource_id>
    <date_to>2099-12-31T00:00:00+00:00</date_to>
    <birth_date>2000-01-01T00:00:00+00:00</birth_date>
    <client>w</client>    
</AgressoQE>	
</Root>

   static void Main(string[] args)
        {
            XDocument xml = XDocument.Load(@"New.xml"); // loading source xml
            var xmls = xml.Root.Elements().ToArray(); // split into elements

            for (int i = 0; i < xmls.Length; i++)
            {
                // write each element into different file
                using (var file = File.CreateText(string.Format("xml{0}.xml", i + 1)))
                {
                    file.Write(xmls[i].ToString());
                }
            }
        }

The pictures below are content of xml file.

xml1.xml

xml2.xml

xml3.xml

xml4.xml

Best Regards,

Wendy


这篇关于C#将xml文件拆分成多个文件并映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆