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();

  • 相关阅读:
    CodeSmith快速向导
    生活忠告
    MSF 组队模型
    Javascript 全面理解 caller,callee,call,apply
    Sys.WebForms.PageRequestManagerServerErrorException(status code 500 OR 12031)
    经典问题:向setTimeout传递函数参数
    [转]JavaScript面向对象的特性
    数据库设计的体会
    Geomedia性能
    关于在SVG中如何实现gif动画的问题?
  • 原文地址:https://www.cnblogs.com/ykwang/p/3385606.html
Copyright © 2011-2022 走看看