c#

位置:IT落伍者 >> c# >> 浏览文章

在C#.net中操作XML实例


发布日期:2020年01月01日
 
在C#.net中操作XML实例

在中如何操作XML

需要添加的命名空间

using SystemXml;

定义几个公共对象

XmlDocument xmldoc ;

XmlNode xmlnode ;

XmlElement xmlelem ;

创建到服务器同名目录下的xml文件

方法一

xmldoc = new XmlDocument ( ) ;

//加入XML的声明段落

xmlnode = xmldocCreateNode ( XmlNodeTypeXmlDeclaration ) ;

xmldocAppendChild ( xmlnode ) ;

//加入一个根元素

xmlelem = xmldocCreateElement ( Employees ) ;

xmldocAppendChild ( xmlelem ) ;

//加入另外一个元素

for(int i=;i<;i )

{

XmlNode root=xmldocSelectSingleNode(Employees);//查找<Employees>

XmlElement xe=xmldocCreateElement(Node);//创建一个<Node>节点

xeSetAttribute(genre李赞红);//设置该节点genre属性

xeSetAttribute(ISBN);//设置该节点ISBN属性

XmlElement xesub=xmldocCreateElement(title);

xesubInnerText=CS从入门到精通;//设置文本节点

xeAppendChild(xesub);//添加到<Node>节点中

XmlElement xesub=xmldocCreateElement(author);

xesubInnerText=候捷;

xeAppendChild(xesub);

XmlElement xesub=xmldocCreateElement(price);

xesubInnerText=;

xeAppendChild(xesub);

rootAppendChild(xe);//添加到<Employees>节点中

}

//保存创建好的XML文档

xmldocSave ( ServerMapPath(dataxml) ) ;

//////////////////////////////////////////////////////////////////////////////////////

结果在同名目录下生成了名为dataxml的文件内容如下

<?xml version=?>

<Employees>

<Node genre=李赞红 ISBN=>

<title>CS从入门到精通</title>

<author>候捷</author>

<price></price>

</Node>

<Node genre=李赞红 ISBN=>

<title>CS从入门到精通</title>

<author>候捷</author>

<price></price>

</Node>

</Employees>

方法二

XmlTextWriter xmlWriter;

string strFilename = ServerMapPath(dataxml) ;

xmlWriter = new XmlTextWriter(strFilenameEncodingDefault);//创建一个xml文档

xmlWriterFormatting = FormattingIndented;

xmlWriterWriteStartDocument();

xmlWriterWriteStartElement(Employees);

xmlWriterWriteStartElement(Node);

xmlWriterWriteAttributeString(genre李赞红);

xmlWriterWriteAttributeString(ISBN);

xmlWriterWriteStartElement(title);

xmlWriterWriteString(CS从入门到精通);

xmlWriterWriteEndElement();

xmlWriterWriteStartElement(author);

xmlWriterWriteString(候捷);

xmlWriterWriteEndElement();

xmlWriterWriteStartElement(price);

xmlWriterWriteString();

xmlWriterWriteEndElement();

xmlWriterWriteEndElement();

xmlWriterClose();

//////////////////////////////////////////////////////////////////////////////////////

结果

<?xml version= encoding=gb?>

<Employees>

<Node genre=李赞红 ISBN=>

<title>CS从入门到精通</title>

<author>候捷</author>

<price></price>

</Node>

</Employees>

添加一个结点

XmlDocument xmlDoc=new XmlDocument();

xmlDocLoad(ServerMapPath(dataxml));

XmlNode root=xmlDocSelectSingleNode(Employees);//查找<Employees>

XmlElement xe=xmlDocCreateElement(Node);//创建一个<Node>节点

xeSetAttribute(genre张三);//设置该节点genre属性

xeSetAttribute(ISBN);//设置该节点ISBN属性

XmlElement xesub=xmlDocCreateElement(title);

xesubInnerText=C#入门帮助;//设置文本节点

xeAppendChild(xesub);//添加到<Node>节点中

XmlElement xesub=xmlDocCreateElement(author);

xesubInnerText=高手;

xeAppendChild(xesub);

XmlElement xesub=xmlDocCreateElement(price);

xesubInnerText=;

xeAppendChild(xesub);

rootAppendChild(xe);//添加到<Employees>节点中

xmlDocSave ( ServerMapPath(dataxml) );

//////////////////////////////////////////////////////////////////////////////////////

结果在xml原有的内容里添加了一个结点内容如下

<?xml version=?>

<Employees>

<Node genre=李赞红 ISBN=>

<title>CS从入门到精通</title>

<author>候捷</author>

<price></price>

</Node>

<Node genre=李赞红 ISBN=>

<title>CS从入门到精通</title>

<author>候捷</author>

<price></price>

</Node>

<Node genre=张三 ISBN=>

<title>C#入门帮助</title>

<author>高手</author>

<price></price>

</Node>

</Employees>

修改结点的值(属性和子结点)

XmlDocument xmlDoc=new XmlDocument();

xmlDocLoad( ServerMapPath(dataxml) );

XmlNodeList nodeList=xmlDocSelectSingleNode(Employees)ChildNodes;//获取Employees节点的所有子节点

foreach(XmlNode xn in nodeList)//遍历所有子节点

{

XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型

if(xeGetAttribute(genre)==张三)//如果genre属性值为张三

{

xeSetAttribute(genreupdate张三);//则修改该属性为update张三

XmlNodeList nls=xeChildNodes;//继续获取xe子节点的所有子节点

foreach(XmlNode xn in nls)//遍历

{

XmlElement xe=(XmlElement)xn;//转换类型

if(xeName==author)//如果找到

{

xeInnerText=亚胜;//则修改

}

}

}

}

xmlDocSave( ServerMapPath(dataxml) );//保存

//////////////////////////////////////////////////////////////////////////////////////

结果将原来的所有结点的信息都修改了xml的内容如下

<?xml version=?>

<Employees>

<Node genre=李赞红 ISBN=>

<title>CS从入门到精通</title>

<author>候捷</author>

<price></price>

</Node>

<Node genre=李赞红 ISBN=>

<title>CS从入门到精通</title>

<author>候捷</author>

<price></price>

</Node>

<Node genre=update张三 ISBN=>

<title>C#入门帮助</title>

<author>亚胜</author>

<price></price>

</Node>

</Employees>

修改结点(添加结点的属性和添加结点的自结点)

XmlDocument xmlDoc=new XmlDocument();

xmlDocLoad( ServerMapPath(dataxml) );

XmlNodeList nodeList=xmlDocSelectSingleNode(Employees)ChildNodes;//获取Employees节点的所有子节点

foreach(XmlNode xn in nodeList)

{

XmlElement xe=(XmlElement)xn;

xeSetAttribute(test);

XmlElement xesub=xmlDocCreateElement(flag);

xesubInnerText=;

xeAppendChild(xesub);

}

xmlDocSave( ServerMapPath(dataxml) );

//////////////////////////////////////////////////////////////////////////////////////

结果每个结点的属性都添加了一个子结点也添加了一个内容如下

<?xml version=?>

<Employees>

<Node genre=李赞红 ISBN= test=>

<title>CS从入门到精通</title>

<author>候捷</author>

<price></price>

<flag></flag>

</Node>

<Node genre=李赞红 ISBN= test=>

<title>CS从入门到精通</title>

<author>候捷</author>

<price></price>

<flag></flag>

</Node>

<Node genre=update张三 ISBN= test=>

<title>C#入门帮助</title>

<author>亚胜</author>

<price></price>

<flag></flag>

</Node>

</Employees>

删除结点中的某一个属性

XmlDocument xmlDoc=new XmlDocument();

xmlDocLoad( ServerMapPath(dataxml) );

XmlNodeList xnl=xmlDocSelectSingleNode(Employees)ChildNodes;

foreach(XmlNode xn in xnl)

{

XmlElement xe=(XmlElement)xn;

xeRemoveAttribute(genre);//删除genre属性

XmlNodeList nls=xeChildNodes;//继续获取xe子节点的所有子节点

foreach(XmlNode xn in nls)//遍历

{

XmlElement xe=(XmlElement)xn;//转换类型

if(xeName==flag)//如果找到

{

xeRemoveChild(xe);//则删除

}

}

}

xmlDocSave( ServerMapPath(dataxml) );

//////////////////////////////////////////////////////////////////////////////////////]

结果删除了结点的一个属性和结点的一个子结点内容如下

<?xml version=?>

<Employees>

<Node ISBN= test=>

<title>CS从入门到精通</title>

<author>候捷</author>

<price></price>

</Node>

<Node ISBN= test=>

<title>CS从入门到精通</title>

<author>候捷</author>

<price></price>

</Node>

<Node ISBN= test=>

<title>C#入门帮助</title>

<author>亚胜</author>

<price></price>

</Node>

</Employees>

删除结点

XmlDocument xmlDoc=new XmlDocument();

xmlDocLoad( ServerMapPath(dataxml) );

XmlNode root=xmlDocSelectSingleNode(Employees);

XmlNodeList xnl=xmlDocSelectSingleNode(Employees)ChildNodes;

for(int i=;i<xnlCount;i )

{

XmlElement xe=(XmlElement)xnlItem(i);

if(xeGetAttribute(genre)==张三)

{

rootRemoveChild(xe);

if(i<xnlCount)i=i;

}

}

xmlDocSave( ServerMapPath(dataxml) );

结果删除了符合条件的所有结点原来的内容

<?xml version=?>

<Employees>

<Node genre=李赞红 ISBN=>

<title>CS从入门到精通</title>

<author>候捷</author>

<price></price>

</Node>

<Node genre=李赞红 ISBN=>

<title>CS从入门到精通</title>

<author>候捷</author>

<price></price>

</Node>

<Node genre=张三 ISBN=>

<title>C#入门帮助</title>

<author>高手</author>

<price></price>

</Node>

<Node genre=张三 ISBN=>

<title>C#入门帮助</title>

<author>高手</author>

<price></price>

</Node>

</Employees>

删除后的内容

<?xml version=?>

<Employees>

<Node genre=李赞红 ISBN=>

<title>CS从入门到精通</title>

<author>候捷</author>

<price></price>

</Node>

<Node genre=李赞红 ISBN=>

<title>CS从入门到精通</title>

<author>候捷</author>

<price></price>

</Node>

</Employees>

               

上一篇:Visual Basic.Net实现TCP协议

下一篇:.Net 下信号量(Semaphore)的一种实现