使用xmlreader遍历文档是很方便的,使用xmlwriter生成一个新的xml文档也很容易.但是对现有的xml进行修改,例如添加一个元素或修改一个属性值,就比较麻烦了.此时,可以使用xmldocument对象,通过调用dom方法对文档进行修改,然后再保存.由于dom已经进行了标准化,很多语言都对他进行了支持,比如js,因此这里的很多方法与js中都是一致的,比如getelementbyid(),getelementbytagname(),appendchild(),insertafter()等.
1、创建一个xml文件
xmldocument doc = new xmldocument();
xmldeclaration dec = doc.createxmldeclaration("1.0", "utf-8", null);
doc.appendchild(dec);
xmlelement root = doc.createelement("bookstore");//创建根节点
doc.appendchild(root);
xmlelement newbook = _doc.createelement("book");//create a new 'book' element
//set some attributes
newbook.setattribute("genre", "mystery"); newbook.setattribute("publicationdate", "2001"); newbook.setattribute("isbn", "123456789");
//create a new 'title' element
xmlelement newtitle = _doc.createelement("title"); newtitle.innertext = "case of the missing cookie"; newbook.appendchild(newtitle);
//create new author element
xmlelement newauthor = _doc.createelement("author"); newbook.appendchild(newauthor);
//create new name element xmlelement newname = _doc.createelement("name"); newname.innertext = "cookie monster"; newauthor.appendchild(newname);
//create new price element xmlelement newprice = _doc.createelement("price"); newprice.innertext = "9.95"; newbook.appendchild(newprice); //add to the current documentdoc.documentelement.appendchild(newbook);//_doc.documentelement为获取xml的根
doc.save("bb.xml");将 xml 文档保存到指定的位置
2、插入节点 与创建xml 文件类似
_doc.load("books.xml"); xmlelement newbook = _doc.createelement("book"); newbook.setattribute("genre", "mystery"); newbook.setattribute("publicationdate", "2001"); newbook.setattribute("isbn", "123456789"); xmlelement newtitle = _doc.createelement("title"); newtitle.innertext = "case of the missing cookie"; newbook.appendchild(newtitle); xmlelement newauthor = _doc.createelement("author"); newbook.appendchild(newauthor); xmlelement newname = _doc.createelement("name"); newname.innertext = "cookie monster"; newauthor.appendchild(newname); xmlelement newprice = _doc.createelement("price"); newprice.innertext = "9.95"; newbook.appendchild(newprice); _doc.documentelement.appendchild(newbook);
_doc.save("booksedit.xml");
或者下面这样保存 xmltextwriter tr = new xmltextwriter("booksedit.xml", null);//将xml文档保存,如果存在此文件,则覆盖 tr.formatting = formatting.indented; _doc.writecontentto(tr);
tr.close();
3、修改xml节点
将genre属性值为“novel“的节点的genre值改为“updatenovel”,将该节点的子节点的文本修改为“啦啦啦啦”。
xmlnodelist nodelist=xmldoc.selectsinglenode("bookstore").childnodes;//获取bookstore节点的所有子节点 foreach(xmlnode xn in nodelist)//遍历所有子节点 { xmlelement xe=(xmlelement)xn;//将子节点类型转换为xmlelement类型 if(xe.getattribute("genre")=="novel")//如果genre属性值为“李赞红” { xe.setattribute("genre","updatenovel");//则修改该属性为“update李赞红” xmlnodelist nls=xe.childnodes;//继续获取xe子节点的所有子节点 foreach(xmlnode xn1 in nls)//遍历 { xmlelement xe2=(xmlelement)xn1;//转换类型 if(xe2.name=="title")//如果找到 { xe2.innertext="亚胜";//则修改 break;//找到退出来就可以了 } } break; } }
xmldoc.save("bookstore.xml");//保存。
4、删除节点
节点的genre属性,删除 节点。
xmlnodelist xnl=xmldoc.selectsinglenode("bookstore").childnodes;
foreach(xmlnode xn in xnl)
{
xmlelement xe=(xmlelement)xn;
if(xe.getattribute("genre")=="fantasy")
{
xe.removeattribute("genre");//删除genre属性
}
else if(xe.getattribute("genre")=="update李赞红")
{
xe.removeall();//删除该节点的全部内容
}
}
xmldoc.save("bookstore.xml");
5、遍历xml
string filepath = "bookstore.xml";
xmldocument doc = new xmldocument();
doc.load(filepath);
xmlnode root = doc.documentelement;
shownode(root);
private static void shownode(xmlnode root)
{
if (root.nodetype==xmlnodetype.text)
{
console.writeline(root.value);
}
if (root.nodetype==xmlnodetype.element)
{
console.writeline(root.name);
}
if (root.attributes!=null&&root.attributes.count>0)
{
foreach (xmlattribute attr in root.attributes)
{
console.write("{0}={1} ",attr.name,attr.value);
}
console.writeline();
}
xmlnodelist chiledlist = root.childnodes;
foreach (xmlnode child in chiledlist)
{
shownode(child);
}
}
以上就是xmldocument 对象操作详细步骤的详细内容。