none
如何上移Xml节点? RRS feed

  • 问题

  • <?xml version="1.0" encoding="utf-8"?>
    <UserList>
     <User>A1</User>
     <User>A2</User>
     <User>A3</User>
    </UserList>
    

    Xml Binding到了ComboBox上面,当我用选中了A3时。A3会默认移动到A1的上面。请问这个功能用C#如何实现?
    2011年7月13日 6:43

答案

  • 你好

    你把xml放在bin下,试试下面的代码:

    string path = Application.StartupPath + @"\XML.xml";
    
    public Form1()
        {
          InitializeComponent();
     
          XmlDocument doc = new XmlDocument();
          doc.Load(path);
          XmlNodeList UserList = doc.SelectNodes("UserList/User");
          foreach (XmlNode user in UserList)
          {
            comboBox1.Items.Add(user.InnerText);
          }     
          
        }
    


    在combox的indexchanged里面:

     private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
          XmlDocument xmlDocument = new XmlDocument();
          xmlDocument.Load(path);
          XmlNodeList fieldNodes = xmlDocument.SelectNodes(@"UserList/User");
          
          foreach (XmlNode xn in fieldNodes)
          {
            if (xn.InnerText == comboBox1.SelectedItem.ToString())
            {
              
              xn.ParentNode.InsertBefore(xn, fieldNodes[1].PreviousSibling);   
            }
          }
          xmlDocument.Save(path);
          
          
        }
    

    希望对你有帮助~


    Cookie Luo[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 MaJiXiang 2011年7月15日 2:41
    2011年7月14日 9:43

全部回复

  • 你好!

    在界面上交换 Combobox 上下两个 Item 的 Text 属性即实现上移的功能。

    XML 中要更改顺序你可能需要要保存文件时重写这个节点的内容

    或者在 XML 中增加序号属性来维护顺序


    知识改变命运,奋斗成就人生!
    2011年7月13日 7:11
    版主
  • 您好,我的需求是假如本次用户选择了A3,那么当他下次再打开程序时,A3就到ComboBox第一个位置。

    而您说的交换ListItem一直保留在内存中,当把程序关了就只能把数据记录在文档中,所以我选择XML.

    2011年7月13日 9:08
  • hi~

    提供您一個想法。

    原本的 xml 不變,但您可以記錄下來 User 是選擇哪一個 (假定是A3好了)

    此時在關閉程序後,把 A3 值記錄到另一個 Xml (假定叫 ChoiceConfig.xml ),等下一次開程序時,程序去讀 ChoiceConfig.xml 檔,然後再把原本的 xml 檔的順序調整一下。

    這樣也是一個變通的方法~  如此就不用再重寫原本的 xml 檔,而破壞原本的架構。


    逐步學習,逐夢踏實;腳步要踩穩,這樣下一步才不會跌倒。 http://www.dotblogs.com.tw/nobel12
    2011年7月13日 13:47
  • .NET难道没有提供如何操作XML Node 移动的方法实现吗?我在msdn没找到。
    2011年7月14日 2:57
  • 在写文件的时候把节点顺序调整一下嘛
    知识改变命运,奋斗成就人生!
    2011年7月14日 3:10
    版主
  • 是啊,我也想调整节点顺序,有例子吗?我是新手
    2011年7月14日 7:53
  • 你好

    你把xml放在bin下,试试下面的代码:

    string path = Application.StartupPath + @"\XML.xml";
    
    public Form1()
        {
          InitializeComponent();
     
          XmlDocument doc = new XmlDocument();
          doc.Load(path);
          XmlNodeList UserList = doc.SelectNodes("UserList/User");
          foreach (XmlNode user in UserList)
          {
            comboBox1.Items.Add(user.InnerText);
          }     
          
        }
    


    在combox的indexchanged里面:

     private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
          XmlDocument xmlDocument = new XmlDocument();
          xmlDocument.Load(path);
          XmlNodeList fieldNodes = xmlDocument.SelectNodes(@"UserList/User");
          
          foreach (XmlNode xn in fieldNodes)
          {
            if (xn.InnerText == comboBox1.SelectedItem.ToString())
            {
              
              xn.ParentNode.InsertBefore(xn, fieldNodes[1].PreviousSibling);   
            }
          }
          xmlDocument.Save(path);
          
          
        }
    

    希望对你有帮助~


    Cookie Luo[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 MaJiXiang 2011年7月15日 2:41
    2011年7月14日 9:43
  • 谢谢就是这个XmlNode.InsertBefore方法
    2011年7月15日 3:17
  • 不客气^_^
    Cookie Luo[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年7月15日 4:37