您的位置:首页 > 其它

XML文件操作的两个方法

2010-10-13 15:05 330 查看
1. XmlNode.Clone()/CloneNode()--创建此节点的一个副本,等效于调用 CloneNode(true)/当在派生类中被重写时,创建该节点的副本。
public virtual XmlNode Clone ()/public abstract XmlNode CloneNode (bool deep)
对于CloneNode中的deep参数,如果为 true,则递归地克隆指定节点下的子树;如果为 false,则只克隆该节点本身。
XmlNodeType
CloneNode(true)
CloneNode(false)
属性
克隆属性节点(包括子节点)。
克隆属性节点(包括子节点)。
CData
克隆 CData 节点(包括它的数据内容)。
克隆 CData 节点(包括它的数据内容)。
Comment
克隆注释节点(包括它的文本内容)。
克隆注释节点(包括它的文本内容)。
Document
克隆文档节点(包括任何子节点)。
克隆文档节点。
DocumentFragment
克隆文档片段节点(包括任何子节点)。
克隆文档片段节点。
DocumentType
克隆文档类型节点。
克隆文档类型节点。
Element
克隆元素节点、其属性和任何子节点。
克隆元素节点及其属性(包括任何默认属性)。
Entity
无法克隆 Entity 节点。
无法克隆 Entity 节点。
EntityReference
克隆实体引用节点。不包括替换文本。
克隆实体引用节点。不包括替换文本。
Notation
表示法节点无法克隆。
表示法节点无法克隆。
ProcessingInstruction
克隆处理指令节点(包括它的目标和数据)。
克隆处理指令节点(包括它的目标和数据)。
SignificantWhitespace
克隆重要的空白节点(包括它的数据值)。
克隆重要的空白节点(包括它的数据值)。
Text
克隆文本节点(包括它的数据值)。
克隆文本节点(包括它的数据值)。
Whitespace
克隆空白节点(包括它的数据值)。
克隆空白节点(包括它的数据值)。
XmlDeclaration
克隆 XmlDeclaration 节点(包括它的数据值)。
克隆 XmlDeclaration 节点(包括它的数据值)。
所有其他节点类型。
这些节点类型无法克隆。
这些节点类型无法克隆。
2. XmlNode.ImportNode()方法--将节点从另一个文档导入到当前文档。
public virtual XmlNode ImportNode (XmlNode node,bool deep)--node是正在被导入的节点,deep表示如果执行深层克隆,则为 true;否则为 false。
3. 这两个方法的结合应用:
现在我有三个xml文件,1.xml,2.xml,3.xml, 其中2.xml文件的根节点有三个子节点<Node>包含属性和子节点,1.xml中的根节点只有一个子节点<Node>与2.xml文件根节点的三个子节点中的一个完全相同,现在要把2.xml根节点剩下的那两个1.xml中没有的子<node>节点(全部)添加到3.xml根节点下。
一开始这么写的:
XmlDocument xd1 = new XmlDocument();
XmlDocument xd2 = new XmlDocument();
XmlDocument xd3 = new XmlDocument();
xd1.Load("1.xml");
xd2.Load("2.xml");
xd3.Load("3.xml");
XmlNode root1 = xd1.DocumentElement;
XmlNode root2 = xd2.DocumentElement;
XmlNode root3 = xd3.DocumentElement;
XmlNodeList list1 = root1.SelectNodes("Node");
XmlNodeList list2 = root2.SelectNodes("Node");
for (int i = 1; < list2.Count; i++)
{
XmlNode HGN=list2.CloneNode(true);
root3.AppendChild(HGN);
}
这时候弹出一System.ArgumentException异常,具体信息:要插入的节点是来自不同的文件内容。
修改如下:
for (int i = 1; < list2.Count; i++)
{
XmlNode HGN=xd3.ImportNode(list2.CloneNode(true), true);
root3.AppendChild(HGN);
}
这样就成功的往3.xml中添加了2中多的那两个node节点,包含属性和子节点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: