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();
C#XML创建与节点对象引用的更多相关文章
- XMLHelper类 源码(XML文档帮助类,静态方法,实现对XML文档的创建,及节点和属性的增、删、改、查)
以下是代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...
- XML通过XSL格式化的那点事(XML到自定义节点折叠显示)
引言 有时我们想看下系统生成的XML文件(如XML格式的Project文件),如果文件结构简单,我们浏览器看起来还比较方便,但是随着XML schema复杂后就变得让人头疼啦,单独写一个程序去做展现又 ...
- c#xml追加读取节点
读取 if (File.Exists("Book.xml")) { XmlDocument doc = new XmlDocument(); doc.Load("Book ...
- 使用DOM解析XML文件,、读取xml文件、保存xml、增加节点、修改节点属性、删除节点
使用的xml文件 <?xml version="1.0" encoding="GB2312" ?> <PhoneInfo> <Br ...
- 使用LINQ TO XML 创建xml文档,以及读取xml文档把内容显示到GridView例子
首先,准备了一个Model类 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...
- TXMLDocument 创建空值节点不要缩写
TXMLDocument 创建空值节点不要缩写 xmldoc.CreateNode('input'); 然后访问 xmldoc.DocumentElement.XML <input/> 节 ...
- C#基础巩固(2)-Linq To XML创建XML
一.首先要清楚一个正确的XML基本格式是怎样的. 1.后缀名.xml结尾 2.有一行描述 3.有且仅有一个根节点. 如图: 一个正确的xml文件能够被浏览器打开且显示.所以判断一个xml文件有没有错误 ...
- Dom4j向XML中增加节点与属性——(四)
先获取到节点,然后在节点山添加Element 添加节点 添加属性 设置开始标签与结束标签的值book.addElement("描述").addAttribute("nam ...
- C# XML创建解析、XML格式化
导入命名空间: VS需要在项目中添加引用system.XML; 代码中添加 using System.XML和using System.IO; XML范例: <?xml version=&quo ...
随机推荐
- 针对C#程序做性能测试的一些基本准则
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:针对C#程序做性能测试的一些基本准则.
- 自己写的一个Js小插件
这是效果图.上面一个过滤标签.下面弹出框,选择日,周,月.我的用途主要是报表查询的时候根据这3种类型来查询数据用的. 这里分享下代码. Js代码 (function ($) { $.extend($. ...
- RSA加密解密操作
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- JAVA调用操作javascript (JS)工具类
import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import ...
- java transient简单介绍
我们都知道一个对象仅仅要实现了Serilizable接口,这个对象就能够被序列化,java的这样的序列化模式为开发人员提供了非常多便利,我们能够不必关系详细序列化的过程,仅仅要这个类实现了Serili ...
- mac jdbc连接mysql
1.下载jdbc驱动: http://dev.mysql.com/downloads/connector/j/ 2.增加jdbc的jar包至项目的libs文件夹并build path 2.改动环境变量 ...
- sed命令详解--转
1.简介 sed是非交互式的编辑器.它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所有的输出行都被打印到屏幕上. sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下 ...
- 69 Spring Interview Questions and Answers – The ULTIMATE List--reference
This is a summary of some of the most important questions concerning the Spring Framework, that you ...
- 常用工具之stunnel
The stunnel program is designed to work as an SSL encryption wrapper between remote client and local ...
- jedis应用实例
最近将redis整合到项目中,将redis作为cache使用,未来进一步作为消息推送使用.我通过jedis和spring配置实现操作redis. spring配置 <!-- redis配置 -- ...