首页 新闻 搜索 专区 学院

C# XML拼接

0
悬赏园豆:100 [已解决问题] 解决于 2016-10-12 22:50
<?xml version="1.0" ?>
<Order>//因为只能有一个根节点所以临时加了一个order节点
<OrderInfo>//第一条
    <OrderNum>1</OrderNum>
    <OrderDt></OrderDt>
    <OrderDtm></OrderDtm>
    <MdctNum></MdctNum>
    <MdctDt></MdctDt>
    <PtntNum></PtntNum>
    <PtntNm></PtntNm>
    <Sex></Sex>
    <Birthday></Birthday>
    <InOutClsf>I</InOutClsf>
    <HsptCd></HsptCd>
    <DptmtCd></DptmtCd>
    <DoctorNm></DoctorNm>
    <WardCd></WardCd>
    <RoomNum></RoomNum>
    <BedNum></BedNum>
    <EmgClsf></EmgClsf>
    <DschClsf></DschClsf>
    <OrderClsf> </OrderClsf>
    <Note></Note>
    <DataClsf></DataClsf>
    <DspsOpt></DspsOpt>
    <SickCd></SickCd>
    <SickNm></SickNm>
    <AllergyNm></AllergyNm>
    <ReqSiteCd></ReqSiteCd>
    <ReqSiteNm></ReqSiteNm>
<MedItem>    <MedCd></MedCd>    <MedNm>1</MedNm>    <MedType></MedType>    <MedUnit></MedUnit>    <PowderYn></PowderYn>    <UseAtcYn>Y</UseAtcYn>    <GroupNum></GroupNum>    <MedNote></MedNote>    <DschYn></DschYn>    <OrderMedKey></OrderMedKey>    <MedItemDose>      <TakeDt></TakeDt>      <TakeDays></TakeDays>      <DrtsCd></DrtsCd>      <DrtsNm></DrtsNm>      <DoseList></DoseList>    </MedItemDose> </MedItem>
</OrderInfo> <OrderInfo>//第二条 <OrderNum>1</OrderNum> <OrderDt></OrderDt> <OrderDtm></OrderDtm> <MdctNum></MdctNum> <MdctDt></MdctDt> <PtntNum></PtntNum> <PtntNm></PtntNm> <Sex></Sex> <Birthday></Birthday> <InOutClsf>I</InOutClsf> <HsptCd></HsptCd> <DptmtCd></DptmtCd> <DoctorNm></DoctorNm> <WardCd></WardCd> <RoomNum></RoomNum> <BedNum></BedNum> <EmgClsf></EmgClsf> <DschClsf></DschClsf> <OrderClsf> </OrderClsf> <Note></Note> <DataClsf></DataClsf> <DspsOpt></DspsOpt> <SickCd></SickCd> <SickNm></SickNm> <AllergyNm></AllergyNm> <ReqSiteCd></ReqSiteCd> <ReqSiteNm></ReqSiteNm>

<MedItem>    <MedCd></MedCd>    <MedNm>2</MedNm>    <MedType></MedType>    <MedUnit></MedUnit>    <PowderYn></PowderYn>    <UseAtcYn>Y</UseAtcYn>    <GroupNum></GroupNum>    <MedNote></MedNote>    <DschYn></DschYn>    <OrderMedKey></OrderMedKey>    <MedItemDose>      <TakeDt></TakeDt>      <TakeDays></TakeDays>      <DrtsCd></DrtsCd>      <DrtsNm></DrtsNm>      <DoseList></DoseList>    </MedItemDose> </MedItem>

</OrderInfo> </Order> ......可能有多条OrderInfo

理想拼成這样:

复制代码
<?xml version="1.0" ?>
<OrderInfo>
    <OrderNum>1</OrderNum>
    <OrderDt></OrderDt>
    <OrderDtm></OrderDtm>
    <MdctNum></MdctNum>
    <MdctDt></MdctDt>
    <PtntNum></PtntNum>
    <PtntNm></PtntNm>
    <Sex></Sex>
    <Birthday></Birthday>
    <InOutClsf>I</InOutClsf>
    <HsptCd></HsptCd>
    <DptmtCd></DptmtCd>
    <DoctorNm></DoctorNm>
    <WardCd></WardCd>
    <RoomNum></RoomNum>
    <BedNum></BedNum>
    <EmgClsf></EmgClsf>
    <DschClsf></DschClsf>
    <OrderClsf> </OrderClsf>
    <Note></Note>
    <DataClsf></DataClsf>
    <DspsOpt></DspsOpt>
    <SickCd></SickCd>
    <SickNm></SickNm>
    <AllergyNm></AllergyNm>
    <ReqSiteCd></ReqSiteCd>
    <ReqSiteNm></ReqSiteNm>

    <MedItem>
      <MedCd></MedCd>
      <MedNm>1</MedNm>
      <MedType></MedType>
      <MedUnit></MedUnit>
      <PowderYn></PowderYn>
      <UseAtcYn>Y</UseAtcYn>
      <GroupNum></GroupNum>
      <MedNote></MedNote>
      <DschYn></DschYn>
      <OrderMedKey></OrderMedKey>
      <MedItemDose>
        <TakeDt></TakeDt>
        <TakeDays></TakeDays>
        <DrtsCd></DrtsCd>
        <DrtsNm></DrtsNm>
        <DoseList></DoseList>
      </MedItemDose>
    </MedItem>//上面基本都不变 只是把相同OrderInfo节点下的OrderNum相同值的MedItem拼接在后面,和成一个OrderInfo,并去掉之前的Order根节点
          
    <MedItem>
      <MedCd></MedCd>
      <MedNm>2</MedNm>
      <MedType></MedType>
      <MedUnit></MedUnit>
      <PowderYn></PowderYn>
      <UseAtcYn>Y</UseAtcYn>
      <GroupNum></GroupNum>
      <MedNote></MedNote>
      <DschYn></DschYn>
      <OrderMedKey></OrderMedKey>
      <MedItemDose>
        <TakeDt></TakeDt>
        <TakeDays></TakeDays>
        <DrtsCd></DrtsCd>
        <DrtsNm></DrtsNm>
        <DoseList></DoseList>
      </MedItemDose>
    </MedItem>
</OrderInfo>
复制代码
骑着蜗牛耍流氓的主页 骑着蜗牛耍流氓 | 初学一级 | 园豆:135
提问于:2016-10-11 15:54
< >
分享
最佳答案
1

100园豆是我的啦

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml1 = @"
                <Order>
                <OrderInfo>
                <OrderNum>1</OrderNum>
                <OrderDt>2</OrderDt>
                <OrderDtm></OrderDtm>
                <MdctNum></MdctNum>
                <MdctDt></MdctDt>
                <PtntNum></PtntNum>
                <PtntNm></PtntNm>
                <Sex>F</Sex>
                <Birthday></Birthday>
                <InOutClsf>I</InOutClsf>
                <HsptCd></HsptCd>
                <DptmtCd></DptmtCd>
                <DoctorNm></DoctorNm>
                <WardCd></WardCd>
                <RoomNum>53</RoomNum>
                <BedNum></BedNum>
                <EmgClsf>N</EmgClsf>
                <DschClsf>I</DschClsf>
                <OrderClsf> </OrderClsf>
                <Note></Note>
                <DataClsf></DataClsf>
                <DspsOpt></DspsOpt>
                <SickCd></SickCd>
                <SickNm></SickNm>
                <AllergyNm></AllergyNm>
                <ReqSiteCd></ReqSiteCd>
                <ReqSiteNm></ReqSiteNm>

                <MedItem>
                  <MedCd>这个是为了演示</MedCd>
                  <MedNm></MedNm>
                  <MedType></MedType>
                  <MedUnit></MedUnit>
                  <PowderYn></PowderYn>
                  <UseAtcYn>Y</UseAtcYn>
                  <GroupNum></GroupNum>
                  <MedNote></MedNote>
                  <DschYn></DschYn>
                  <OrderMedKey>1</OrderMedKey>
                  <MedItemDose>
                    <TakeDt></TakeDt>
                    <TakeDays></TakeDays>
                    <DrtsCd></DrtsCd>
                    <DrtsNm></DrtsNm>
                    <DoseList></DoseList>
                  </MedItemDose>
                </MedItem>
                </OrderInfo>
                <OrderInfo>
                <OrderNum>1</OrderNum>
                <OrderDt>2</OrderDt>
                <OrderDtm></OrderDtm>
                <MdctNum></MdctNum>
                <MdctDt></MdctDt>
                <PtntNum></PtntNum>
                <PtntNm></PtntNm>
                <Sex>F</Sex>
                <Birthday></Birthday>
                <InOutClsf>I</InOutClsf>
                <HsptCd></HsptCd>
                <DptmtCd></DptmtCd>
                <DoctorNm></DoctorNm>
                <WardCd></WardCd>
                <RoomNum>53</RoomNum>
                <BedNum></BedNum>
                <EmgClsf>N</EmgClsf>
                <DschClsf>I</DschClsf>
                <OrderClsf> </OrderClsf>
                <Note></Note>
                <DataClsf></DataClsf>
                <DspsOpt></DspsOpt>
                <SickCd></SickCd>
                <SickNm></SickNm>
                <AllergyNm></AllergyNm>
                <ReqSiteCd></ReqSiteCd>
                <ReqSiteNm></ReqSiteNm>

                <MedItem>
                  <MedCd>这是一个示例数据</MedCd>
                  <MedNm></MedNm>
                  <MedType>MedType</MedType>
                  <MedUnit>MedType</MedUnit>
                  <PowderYn>MedType</PowderYn>
                  <UseAtcYn>Y</UseAtcYn>
                  <GroupNum></GroupNum>
                  <MedNote></MedNote>
                  <DschYn></DschYn>
                  <OrderMedKey>2</OrderMedKey>
                  <MedItemDose>
                    <TakeDt>MedType</TakeDt>
                    <TakeDays>MedType</TakeDays>
                    <DrtsCd>MedType</DrtsCd>
                    <DrtsNm></DrtsNm>
                    <DoseList></DoseList>
                  </MedItemDose>
                </MedItem>

                </OrderInfo></Order>";

//            string xml2 = @"
//                <OrderInfo>
//                <OrderNum>1</OrderNum>
//                <OrderDt>2</OrderDt>
//                <OrderDtm></OrderDtm>
//                <MdctNum></MdctNum>
//                <MdctDt></MdctDt>
//                <PtntNum></PtntNum>
//                <PtntNm></PtntNm>
//                <Sex>F</Sex>
//                <Birthday></Birthday>
//                <InOutClsf>I</InOutClsf>
//                <HsptCd></HsptCd>
//                <DptmtCd></DptmtCd>
//                <DoctorNm></DoctorNm>
//                <WardCd></WardCd>
//                <RoomNum>53</RoomNum>
//                <BedNum></BedNum>
//                <EmgClsf>N</EmgClsf>
//                <DschClsf>I</DschClsf>
//                <OrderClsf> </OrderClsf>
//                <Note></Note>
//                <DataClsf></DataClsf>
//                <DspsOpt></DspsOpt>
//                <SickCd></SickCd>
//                <SickNm></SickNm>
//                <AllergyNm></AllergyNm>
//                <ReqSiteCd></ReqSiteCd>
//                <ReqSiteNm></ReqSiteNm>
//
//                <MedItem>
//                  <MedCd>这是一个示例数据</MedCd>
//                  <MedNm></MedNm>
//                  <MedType>MedType</MedType>
//                  <MedUnit>MedType</MedUnit>
//                  <PowderYn>MedType</PowderYn>
//                  <UseAtcYn>Y</UseAtcYn>
//                  <GroupNum></GroupNum>
//                  <MedNote></MedNote>
//                  <DschYn></DschYn>
//                  <OrderMedKey>2</OrderMedKey>
//                  <MedItemDose>
//                    <TakeDt>MedType</TakeDt>
//                    <TakeDays>MedType</TakeDays>
//                    <DrtsCd>MedType</DrtsCd>
//                    <DrtsNm></DrtsNm>
//                    <DoseList></DoseList>
//                  </MedItemDose>
//                </MedItem>
//
//                </OrderInfo>";

            XElement FW = XElement.Parse(xml1);
            

            //将所有接收到的xml保存到一个 线性表中
            List<string> list = new List<string>();
            var xv = FW.Elements("OrderInfo");

            foreach (var item in xv)
            {
                list.Add(item.ToString());
            }

            //将 xml分组,以 orderNUM(订单号)来进行分组,我们认为只要 订单号一样的 xml就是同一组数据
            IEnumerable<IGrouping<string, string>> q = list.GroupBy(new Func<string, string>((item) =>
                {
                    XElement root = XElement.Parse(item);
                    string ak = root.Element("OrderNum").Value;
                    return ak;
                }));


            //遍历分好组的 数据
            foreach (var item in q)
            {

                //从线性表 中找到 订单号 是一样的 订单 
                var p = list.Where((gh) =>
                    {
                        XElement root = XElement.Parse(gh);
                        string hj = root.Element("OrderNum").Value;
                        if (hj.Equals(item.Key))
                        {
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    });

                //将找到的数据整合到一块
                XDocument xdoc = new XDocument();
                //XElement root2 = new XElement("Ran");
                XElement root1 = new XElement("OrderInfo");
                
                //xdoc.Add(root2);
                xdoc.Add(root1);

                root1.Add(new XElement("OrderNum", "1"),
                                new XElement("OrderDt", "1"),
                                new XElement("OrderDtm", "1"),
                                new XElement("MdctNum", "1"),
                                new XElement("MdctDt", "1"),
                                new XElement("PtntNum", "1"),
                                new XElement("PtntNm", "1"),
                                new XElement("Sex", "1"),
                                new XElement("Birthday", "1"));
                // 自己增加需要的数据项

                foreach (string 订单详情 in p)
                {
                    //可以对订单详情进行数据拆解
                    //这里就不拆解了,直接写上 死数据,拆解方法自己去写

                    //还是写一个例子吧:

                    XElement jk = XElement.Parse(订单详情);
                    string MedCd = jk.Element("MedItem").Element("MedCd").Value;
                    string MedNm = jk.Element("MedItem").Element("MedNm").Value;
                    string MedType = jk.Element("MedItem").Element("MedType").Value;
                    string MedUnit = jk.Element("MedItem").Element("MedUnit").Value;
                    string PowderYn = jk.Element("MedItem").Element("PowderYn").Value;

                    string TakeDt = jk.Element("MedItem").Element("MedItemDose").Element("TakeDt").Value;
                    string TakeDays = jk.Element("MedItem").Element("MedItemDose").Element("TakeDays").Value;
                    root1.Add(new XElement("MedItem",
                    new XElement("MedCd", MedCd),
                    new XElement("MedNm", MedNm),
                    new XElement("MedType", MedType),
                    new XElement("MedUnit", MedUnit),
                    new XElement("MedItemDose",
                                  new XElement("TakeDt", TakeDt),
                                  new XElement("TakeDays", TakeDays))));
                }


                Console.WriteLine(xdoc);

            }
        }
    }
}

 

收获园豆:100
田麦成 | 老鸟四级 |园豆:2006 | 2016-10-11 16:38
其他回答(3)
0

又是你。。。

顾晓北 | 园豆:10819 (专家六级) | 2016-10-11 15:55

是啊,大神(-。-;)

支持(0) 反对(0) 骑着蜗牛耍流氓 | 园豆:135 (初学一级) | 2016-10-11 15:56

@骑着蜗牛耍流氓: 别叫我大神,你的分这么多,我确实很想要,但我也确实懒的给你写代码,因为这没什么好处,而且也确实是自己随便搜一下就能出来的事儿。

支持(0) 反对(0) 顾晓北 | 园豆:10819 (专家六级) | 2016-10-11 16:02

@顾晓北: 我只会点前端语言,后台代码搜到 我看不懂不知道怎么凑到一块来写這个功能

支持(0) 反对(0) 骑着蜗牛耍流氓 | 园豆:135 (初学一级) | 2016-10-11 16:03

@骑着蜗牛耍流氓: 话说,你找个人替你写(你们公司的)都比网上直接要快啊,再说了,你看不懂为啥让你来写啊?

支持(0) 反对(0) 顾晓北 | 园豆:10819 (专家六级) | 2016-10-11 16:08

@顾晓北: 我的公司不是软件开发公司,没有人会编程

支持(0) 反对(0) 骑着蜗牛耍流氓 | 园豆:135 (初学一级) | 2016-10-11 16:10

@骑着蜗牛耍流氓: 算了,给你写一下吧,就是把

<MedItem>    <MedCd></MedCd>    <MedNm>2</MedNm>    <MedType></MedType>    <MedUnit></MedUnit>    <PowderYn></PowderYn>    <UseAtcYn>Y</UseAtcYn>    <GroupNum></GroupNum>    <MedNote></MedNote>    <DschYn></DschYn>    <OrderMedKey></OrderMedKey>    <MedItemDose>      <TakeDt></TakeDt>      <TakeDays></TakeDays>      <DrtsCd></DrtsCd>      <DrtsNm></DrtsNm>      <DoseList></DoseList>    </MedItemDose> </MedItem>

 

 

拼一起呗

支持(0) 反对(0) 顾晓北 | 园豆:10819 (专家六级) | 2016-10-11 16:34

@骑着蜗牛耍流氓: 算啦,有人写了我就不写了。

支持(0) 反对(0) 顾晓北 | 园豆:10819 (专家六级) | 2016-10-11 17:14
0

定义第一个实体.范序列化为实体数组.

对这个数组.groupby(m=>new{要判断重复的那些字段.这里可能需要自己写比较器})

.select(m=>new{m.Key把重复的字段一个一个列出来,MedItemList=m.Value})

返回值xml序列化就是你要的

吴瑞祥 | 园豆:29321 (高人七级) | 2016-10-11 16:10

不好意思,专家你写的太模糊了,我小白看不懂,我就想要能执行的代码做参考

支持(0) 反对(0) 骑着蜗牛耍流氓 | 园豆:135 (初学一级) | 2016-10-11 16:17
0

你一个操作XML搞了好几天了吧……你们老板还要你啊——

ensleep | 园豆:1409 (小虾三级) | 2016-10-11 18:48

是我在帮老板忙

支持(0) 反对(0) 骑着蜗牛耍流氓 | 园豆:135 (初学一级) | 2016-10-12 22:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册