在XML文件中添加重复元素

素拉

我有这个XML文件:

<root>
  <Friend_2>
    <MESSAGE_BODY>hi</MESSAGE_BODY>
    <MESSAGE_SENDER_ID>1</MESSAGE_SENDER_ID>
    <MESSAGE_RECEIVER_ID>2</MESSAGE_RECEIVER_ID>
    <MESSAGE_CREATION_DATE>2014-08-29T15:33:18.1191004+03:00</MESSAGE_CREATION_DATE>
  </Friend_2>
</root>

我正在使用此功能通过执行以下操作来向该文件添加元素:

private void createNode(string body, string senderid, string receiverid,DateTime creationDate,string path1,string path2)
{
    XDocument doc1 = XDocument.Load(path1);
    XDocument doc2 = XDocument.Load(path2);
    XElement root1 = new XElement("Friend_"+receiverid);
    XElement root2 = new XElement("Friend_"+senderid);

    root1.Add(new XElement("MESSAGE_BODY", body));
    root1.Add(new XElement("MESSAGE_SENDER_ID", senderid));
    root1.Add(new XElement("MESSAGE_RECEIVER_ID", receiverid));
    root1.Add(new XElement("MESSAGE_CREATION_DATE", creationDate));


    root2.Add(new XElement("MESSAGE_BODY", body));
    root2.Add(new XElement("MESSAGE_SENDER_ID", senderid));
    root2.Add(new XElement("MESSAGE_RECEIVER_ID", receiverid));
    root2.Add(new XElement("MESSAGE_CREATION_DATE", creationDate));

    if (doc1.Root.Element(root1.Name.LocalName) == null)
    {
        doc1.Element("root").Add(root1);
    }

    if (doc2.Root.Element(root2.Name.LocalName) == null)
    {
        doc2.Element("root").Add(root2);
    }

    doc1.Save(path1);
    doc2.Save(path2);
}

但是原始元素已被替换。我希望我的XML文件如下所示:

<root>
  <Friend_2>
    <MESSAGE_BODY>hi</MESSAGE_BODY>
    <MESSAGE_SENDER_ID>1</MESSAGE_SENDER_ID>
    <MESSAGE_RECEIVER_ID>2</MESSAGE_RECEIVER_ID>
    <MESSAGE_CREATION_DATE>2014-08-29T15:33:18.1191004+03:00</MESSAGE_CREATION_DATE>
    <MESSAGE_BODY>how r you ?</MESSAGE_BODY>
    <MESSAGE_SENDER_ID>1</MESSAGE_SENDER_ID>
    <MESSAGE_RECEIVER_ID>2</MESSAGE_RECEIVER_ID>
    <MESSAGE_CREATION_DATE>2014-10-29T15:33:18.1191004+03:00</MESSAGE_CREATION_DATE>
  </Friend_2>
</root>

我拥有这种模式的主要原因是因为我正在使用一个函数来解析文档并返回包含4列2行的dataTable

public static DataSet ConvertXMLToDataTable(string xmlString)
{
    DataSet dataset = new DataSet();
    dataset.ReadXml(xmlString);
    return dataset.Tables.Count > 0 ? dataset : null;
}

DataSet Chat_ds=Convertor.ConvertXMLToDataTable(path);
            if (Chat_ds.Tables.Count > 0)
            {
                DataTable Chat_dt = Chat_ds.Tables["Friend_" + FriendID];

...................

我不能让我的xml看起来像这样:

  <root>
    <Friend_2>
    <message>
    <MESSAGE_BODY>hi</MESSAGE_BODY>
    <MESSAGE_SENDER_ID>1</MESSAGE_SENDER_ID>
    <MESSAGE_RECEIVER_ID>2</MESSAGE_RECEIVER_ID>
    <MESSAGE_CREATION_DATE>2014-08-29T15:33:18.1191004+03:00</MESSAGE_CREATION_DATE>
     </message>

    <message>
    <MESSAGE_BODY>how r you ?</MESSAGE_BODY>
    <MESSAGE_SENDER_ID>1</MESSAGE_SENDER_ID>
    <MESSAGE_RECEIVER_ID>2</MESSAGE_RECEIVER_ID>
    <MESSAGE_CREATION_DATE>2014-10-29T15:33:18.1191004+03:00</MESSAGE_CREATION_DATE>
     </message>

     </Friend_2>
     </root>
基拉祖尔

考虑对Friend_n节点的存在进行一些检查现在,您只是在创建一个全新的Friend_n节点,因此旧内容不再存在。

private void createNode(string body, string senderid, string receiverid,DateTime creationDate,string path1,string path2)
{
    XDocument doc1 = XDocument.Load(path1);
    XDocument doc2 = XDocument.Load(path2);

    string receiver = "Friend_"+receiverid;
    string sender = "Friend_"+senderid;
    XElement root1 = doc1.Element(receiver);
    if (root1 == null)
    {
        root1 = new XElement(receiver);
        doc1.Root.Add(root1);
    }
    XElement root2 = doc1.Element(sender);
    if (root2 == null)
    {
        root2 = new XElement(sender);
        doc2.Root.Add(root2);
    }

    root1.Add(new XElement("MESSAGE_BODY", body));
    root1.Add(new XElement("MESSAGE_SENDER_ID", senderid));
    root1.Add(new XElement("MESSAGE_RECEIVER_ID", receiverid));
    root1.Add(new XElement("MESSAGE_CREATION_DATE", creationDate));

    root2.Add(new XElement("MESSAGE_BODY", body));
    root2.Add(new XElement("MESSAGE_SENDER_ID", senderid));
    root2.Add(new XElement("MESSAGE_RECEIVER_ID", receiverid));
    root2.Add(new XElement("MESSAGE_CREATION_DATE", creationDate));

    doc1.Save(path1);
    doc2.Save(path2);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章