zoukankan      html  css  js  c++  java
  • C#XML创建与节点对象引用

    我们在创建xml过程中会遇到不同的级别有相同节点的情况。如下面的xml:

    <?xml version="1.0" encoding="GBK">

    <goods>

      <price>$3/kg</price>

      <sub>

      <weight>88kg</weight>

      <price>$3/kg</price>

      </sub>

    </goods>

    标记为绿色的两个节点处于不同的级别,但是都引用了相同的XmlNode对象,于是我们写出如下代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    
    namespace XMLTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                XmlDocument myXML = new XmlDocument();
                XmlDeclaration myDeclaration = myXML.CreateXmlDeclaration("1.0", "GBK", null);
                myXML.AppendChild(myDeclaration);
                XmlNode goods = myXML.CreateNode(XmlNodeType.Element,"goods",null);
                myXML.AppendChild(goods);
                XmlNode price = myXML.CreateNode(XmlNodeType.Element, "price", null);
                price.InnerText = "$3/kg";
                goods.AppendChild(price);
                XmlNode sub = myXML.CreateNode(XmlNodeType.Element, "sub", null);
                goods.AppendChild(sub);
    
                XmlNode weight = myXML.CreateNode(XmlNodeType.Element, "weight", null);
                weight.InnerText = "88kg";
                sub.AppendChild(weight);
    
                sub.AppendChild(price);
    
                Console.WriteLine(myXML.InnerXml);
                Console.ReadKey();
            }
        }
    }

    在代码中我们创建了同一个对象price,然后再不同的地方,利用AppendChild去引用,但是结果你会发现结果是:

    <goods>

      <sub>

      <weight>88kg</weight>

      <price>$3/kg</price>

      </sub>

    </goods>

    我的理解是,xml文档在创建过程时在内存中采用树状结构来构建,所以在调用过程中会导致前面调用该对象的链接失效。

    解决方法: 重新复制一个对象。XmlNode price1 = price.Clone();

  • 相关阅读:
    hdu 2.2.4 Wolf and Rabbit 解题心得
    概率(经典问题) 解题心得
    POJ2250:Compromise(LCS) 解题心得
    POJ 3903 Stock Exchange 解题心得
    2015 HUAS Summer Trainning #5~E
    2015 HUAS Summer Trainning #5~A
    015 HUAS Summer Contest#3~A
    2015 HUAS Summer Trainning #4~B
    2015 HUAS Summer Contest#3~E
    2015 HUAS Summer Contest#3~B
  • 原文地址:https://www.cnblogs.com/ykwang/p/3385606.html
Copyright © 2011-2022 走看看