文件管理 · 2022年8月5日

c读取xml文件|用C语言读写xml文件

⑴ 如何从文件中读取 XML,使用 C

/**/ /// <summary> /// XML 操作基类 /// </summary> public class XmlHelper { /**/ /// <summary> /// 读取Xml到DataSet中 /// </summary> /// <param name="XmlPath">路径</param> /// <returns>结果集</returns> public static DataSet GetXml(string XmlPath) { DataSet ds = new DataSet(); ds.ReadXml(@XmlPath); return ds; } /**/ /// <summary> /// 读取xml文档并返回一个节点:适用于一级节点 /// </summary> /// <param name="XmlPath">xml路径</param> /// <param name="NodeName">节点</param> /// <returns></returns> public static string ReadXmlReturnNode(string XmlPath, string Node) { XmlDocument docXml = new XmlDocument(); docXml.Load(@XmlPath); XmlNodeList xn = docXml.GetElementsByTagName(Node); return xn.Item(0).InnerText.ToString(); } /**/ /// <summary> /// 查找数据,返回当前节点的所有下级节点,填充到一个DataSet中 /// </summary> /// <param name="xmlPath">xml文档路径</param> /// <param name="XmlPathNode">节点的路径:根节点/父节点/当前节点</param> /// <returns></returns> public static DataSet GetXmlData(string xmlPath, string XmlPathNode) { XmlDocument objXmlDoc = new XmlDocument(); objXmlDoc.Load(xmlPath); DataSet ds = new DataSet(); StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml); ds.ReadXml(read); return ds; } /**/ /// <summary> /// 更新Xml节点内容 /// </summary> /// <param name="xmlPath">xml路径</param> /// <param name="Node">要更换内容的节点:节点路径 根节点/父节点/当前节点</param> /// <param name="Content">新的内容</param> public static void XmlNodeReplace(string xmlPath, string Node, string Content) { XmlDocument objXmlDoc = new XmlDocument(); objXmlDoc.Load(xmlPath); objXmlDoc.SelectSingleNode(Node).InnerText = Content; objXmlDoc.Save(xmlPath); } /**/ /// <summary> /// 更改节点的属性值 /// </summary> /// <param name="xmlPath">文件路径</param> /// <param name="NodePath">节点路径</param> /// <param name="NodeAttribute1">要更改的节点属性的名称</param> /// <param name="NodeAttributeText">更改的属性值</param> public static void XmlAttributeEdit(string xmlPath, string NodePath, string NodeAttribute1, string NodeAttributeText) { XmlDocument objXmlDoc = new XmlDocument(); objXmlDoc.Load(xmlPath); XmlNode nodePath = objXmlDoc.SelectSingleNode(NodePath); XmlElement xe = (XmlElement)nodePath; xe.SetAttribute(NodeAttribute1, NodeAttributeText); objXmlDoc.Save(xmlPath); } /**/ /// <summary> /// 删除XML节点和此节点下的子节点 /// </summary> /// <param name="xmlPath">xml文档路径</param> /// <param name="Node">节点路径</param> public static void XmlNodeDelete(string xmlPath, string Node) { XmlDocument objXmlDoc = new XmlDocument(); objXmlDoc.Load(xmlPath); string mainNode = Node.Substring(0, Node.LastIndexOf("/")); objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node)); objXmlDoc.Save(xmlPath); } /**/ /// <summary> /// 删除一个节点的属性 /// </summary> /// <param name="xmlPath">文件路径</param> /// <param name="NodePath">节点路径(xpath)</param> /// <param name="NodeAttribute">属性名称</param> public static void xmlnNodeAttributeDel(string xmlPath, string NodePath, string NodeAttribute) { XmlDocument objXmlDoc = new XmlDocument(); objXmlDoc.Load(xmlPath); XmlNode nodePath = objXmlDoc.SelectSingleNode(NodePath); XmlElement xe = (XmlElement)nodePath; xe.RemoveAttribute(NodeAttribute); objXmlDoc.Save(xmlPath); } /**/ /// <summary> /// 插入一个节点和此节点的子节点 /// </summary> /// <param name="xmlPath">xml路径</param> /// <param name="MailNode">当前节点路径</param> /// <param name="ChildNode">新插入节点</param> /// <param name="Element">插入节点的子节点</param> /// <param name="Content">子节点的内容</param> public static void XmlInsertNode(string xmlPath, string MailNode, string ChildNode, string Element, string Content) { XmlDocument objXmlDoc = new XmlDocument(); objXmlDoc.Load(xmlPath); XmlNode objRootNode = objXmlDoc.SelectSingleNode(MailNode); XmlElement objChildNode = objXmlDoc.CreateElement(ChildNode); objRootNode.AppendChild(objChildNode); XmlElement objElement = objXmlDoc.CreateElement(Element); objElement.InnerText = Content; objChildNode.AppendChild(objElement); objXmlDoc.Save(xmlPath); } /**/ /// <summary> /// 向一个节点添加属性 /// </summary> /// <param name="xmlPath">xml文件路径</param> /// <param name="NodePath">节点路径</param> /// <param name="NodeAttribute1">要添加的节点属性的名称</param> /// <param name="NodeAttributeText">要添加属性的值</param> public static void AddAttribute(string xmlPath, string NodePath, string NodeAttribute1, string NodeAttributeText) { XmlDocument objXmlDoc = new XmlDocument(); objXmlDoc.Load(xmlPath); XmlAttribute nodeAttribute = objXmlDoc.CreateAttribute(NodeAttribute1); XmlNode nodePath = objXmlDoc.SelectSingleNode(NodePath); nodePath.Attributes.Append(nodeAttribute); XmlElement xe = (XmlElement)nodePath; xe.SetAttribute(NodeAttribute1, NodeAttributeText); objXmlDoc.Save(xmlPath); } /**/ /// <summary> /// 插入一节点,带一属性 /// </summary> /// <param name="xmlPath">Xml文档路径</param> /// <param name="MainNode">当前节点路径</param> /// <param name="Element">新节点</param> /// <param name="Attrib">属性名称</param> /// <param name="AttribContent">属性值</param> /// <param name="Content">新节点值</param> public static void XmlInsertElement(string xmlPath, string MainNode, string Element, string Attrib, string AttribContent, string Content) { XmlDocument objXmlDoc = new XmlDocument(); objXmlDoc.Load(xmlPath); XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode); XmlElement objElement = objXmlDoc.CreateElement(Element); objElement.SetAttribute(Attrib, AttribContent); objElement.InnerText = Content; objNode.AppendChild(objElement); objXmlDoc.Save(xmlPath); } /**/ /// <summary> /// 插入一节点,不带属性 /// </summary> /// <param name="xmlPath">Xml文档路径</param> /// <param name="MainNode">当前节点路径</param> /// <param name="Element">新节点</param> /// <param name="Content">新节点值</param> public static void XmlInsertElement(string xmlPath, string MainNode, string Element, string Content) { XmlDocument objXmlDoc = new XmlDocument(); objXmlDoc.Load(xmlPath); XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode); XmlElement objElement = objXmlDoc.CreateElement(Element); objElement.InnerText = Content; objNode.AppendChild(objElement); objXmlDoc.Save(xmlPath); } /**/ /// <summary> /// 在根节点下添加父节点 /// </summary> public static void AddParentNode(string xmlPath, string parentNode) { XmlDocument xdoc = new XmlDocument(); xdoc.Load(xmlPath); // 创建一个新的menber节点并将它添加到根节点下 XmlElement Node = xdoc.CreateElement(parentNode); xdoc.DocumentElement.PrependChild(Node); xdoc.Save(xmlPath); } /**/ /// <summary> /// 根据节点属性读取子节点值(较省资源模式) /// </summary> /// <param name="XmlPath">xml路径</param> /// <param name="FatherElement">父节点值</param> /// <param name="AttributeName">属性名称</param> /// <param name="AttributeValue">属性值</param> /// <param name="ArrayLength">返回的数组长度</param> /// <returns></returns> public static System.Collections.ArrayList GetSubElementByAttribute(string XmlPath, string FatherElement, string AttributeName, string AttributeValue, int ArrayLength) { System.Collections.ArrayList al = new System.Collections.ArrayList(); XmlDocument docXml = new XmlDocument(); docXml.Load(@XmlPath); XmlNodeList xn; xn = docXml.DocumentElement.SelectNodes("//" + FatherElement + "[" + @AttributeName + "='" + AttributeValue + "']"); XmlNodeList xx = xn.Item(0).ChildNodes; for (int i = 0; i < ArrayLength & i < xx.Count; i++) { al.Add(xx.Item(i).InnerText); } return al; }

⑵ c#读取修改xml文件的方法

XmlDocument doc = new XmlDocument();doc.Load(@"C:\123.xml"); //@"C:\123.xml"为xml文件所在路径doc.SelectSingleNode("Question/Question[@name=1]").Attributes["sound"].InnerXml = "2"; //将name=1记录下的sound值设为2doc.Save(@"C:\123.xml"); XmlNodeList nodes = doc.SelectNodes("Question/Question");foreach(XmlNode node in nodes){ comboBox1.Items.Add(node.Attributes["name"].InnerXml); //comboBox1为ComboBox控件} //操作完后,comboBox1下拉框中将有1和2。 以上若还有疑问,可以Hi我。

⑶ 用C语言读取xml文件,怎么实现

我上次才给人写过xml文件内容<?xmlversion="1.0"encoding="UTF-8"?>-<aicomoa_response>-<country_list>-<country><id>7</id><pid>0</pid><continent_id>1</continent_id><guohao>93</guohao><cntitle>阿富汗</cntitle><entitle>Afghanistan</entitle><hztitle>阿富汗</hztitle><jptitle>アフガニスタン</jptitle><kotitle>??????</kotitle><jp_pinyin>ア</jp_pinyin><pinyin>AFuHan</pinyin><sid>0</sid><jibie>1</jibie></country>-<country><id>8</id><pid>0</pid><continent_id>2</continent_id><guohao>355</guohao><cntitle>阿尔巴尼亚</cntitle><entitle>Albania</entitle><hztitle>阿尔巴尼亚</hztitle><jptitle>アルバニア</jptitle><kotitle/><jp_pinyin>ア</jp_pinyin><pinyin>AErBaNiYa</pinyin><sid>0</sid><jibie>1</jibie></country></country_list></aicomoa_response>运行结果Info[0]=[id:7|pid:0|continent_id:1|guohao:93|cntitle:阿富汗|entitle:Afghanistan|hztitle:阿富汗|jptitle:アフガニスタン|kotitle:??????|jp_pinyin:ア|pinyin:AFuHan|sid:0|jibie:1|]Info[1]=[id:7|pid:0|continent_id:1|guohao:93|cntitle:阿富汗|entitle:Afghanistan|hztitle:阿富汗|jptitle:アフガニスタン|kotitle:??????|jp_pinyin:ア|pinyin:AFuHan|sid:0|jibie:1|]Pressanykeytocontinue代码#include<stdio.h>#include<string.h>main(){inti=0;FILE*fp;charszFileBuff[1024]={0},szBuff[100][1024];charid[10]={0},pid[10]={0},continent_id[10]={0},guohao[10]={0},cntitle[64]={0},entitle[64]={0},hztitle[64]={0},jptitle[64]={0},kotitle[64]={0},jp_pinyin[64]={0},pinyin[64]={0},sid[10]={0},jibie[10]={0};char*lFirst,*lEnd;fp=fopen("country.txt","r");if(fp==NULL){printf("readXMLfileerror!
");}while(fgets(szFileBuff,1023,fp)){if((lFirst=strstr(szFileBuff,"<id>"))!=NULL){lEnd=strstr(lFirst+1,"</id>");memcpy(id,lFirst+4,lEnd-lFirst-4);}if((lFirst=strstr(szFileBuff,"<pid>"))!=NULL){lEnd=strstr(lFirst+1,"</pid>");memcpy(pid,lFirst+5,lEnd-lFirst-5);}if((lFirst=strstr(szFileBuff,"<continent_id>"))!=NULL){lEnd=strstr(lFirst+1,"</continent_id>");memcpy(continent_id,lFirst+14,lEnd-lFirst-14);}if((lFirst=strstr(szFileBuff,"<guohao>"))!=NULL){lEnd=strstr(lFirst+1,"</guohao>");memcpy(guohao,lFirst+8,lEnd-lFirst-8);}if((lFirst=strstr(szFileBuff,"<cntitle>"))!=NULL){lEnd=strstr(lFirst+1,"</cntitle>");memcpy(cntitle,lFirst+9,lEnd-lFirst-9);}if((lFirst=strstr(szFileBuff,"<entitle>"))!=NULL){lEnd=strstr(lFirst+1,"</entitle>");memcpy(entitle,lFirst+9,lEnd-lFirst-9);}if((lFirst=strstr(szFileBuff,"<hztitle>"))!=NULL){lEnd=strstr(lFirst+1,"</hztitle>");memcpy(hztitle,lFirst+9,lEnd-lFirst-9);}if((lFirst=strstr(szFileBuff,"<jptitle>"))!=NULL){lEnd=strstr(lFirst+1,"</jptitle>");memcpy(jptitle,lFirst+9,lEnd-lFirst-9);}if((lFirst=strstr(szFileBuff,"<kotitle>"))!=NULL){lEnd=strstr(lFirst+1,"</kotitle>");memcpy(kotitle,lFirst+9,lEnd-lFirst-9);}if((lFirst=strstr(szFileBuff,"<jp_pinyin>"))!=NULL){lEnd=strstr(lFirst+1,"</jp_pinyin>");memcpy(jp_pinyin,lFirst+11,lEnd-lFirst-11);}if((lFirst=strstr(szFileBuff,"<pinyin>"))!=NULL){lEnd=strstr(lFirst+1,"</pinyin>");memcpy(pinyin,lFirst+8,lEnd-lFirst-8);}if((lFirst=strstr(szFileBuff,"<sid>"))!=NULL){lEnd=strstr(lFirst+1,"</sid>");memcpy(sid,lFirst+5,lEnd-lFirst-5);}if((lFirst=strstr(szFileBuff,"<jibie>"))!=NULL){lEnd=strstr(lFirst+1,"</jibie>");memcpy(jibie,lFirst+7,lEnd-lFirst-7);}if((lFirst=strstr(szFileBuff,"</country>"))!=NULL){sprintf(szBuff[i],"id:%s|pid:%s|continent_id:%s|guohao:%s|cntitle:%s|entitle:%s|hztitle:%s|jptitle:%s|kotitle:%s|jp_pinyin:%s|pinyin:%s|sid:%s|jibie:%s|",id,pid,continent_id,guohao,cntitle,entitle,hztitle,jptitle,kotitle,jp_pinyin,pinyin,sid,jibie);printf("Info[%d]=[%s]
",i++,szBuff);}}fclose(fp);}

⑷ 怎样用vc++读写xml文件

用微软的 DOM, MSXML4 //引入msxml4.dll #import "C:/WINNT.0/system32/msxml4.dll" //创建XMLDOMDocument指针 MSXML2::IXMLDOMDocumentPtr pXMLDoc; // 初始化COM接口 ::CoInitialize(NULL); // 通过智能指针创建一个解析器的实例 HRESULT hr; hr =pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30)); //加载文件 pXMLDoc->load("f://he.xml"); //在树中查找名为City的节点,"//"表示在任意一层查找 MSXML2::IXMLDOMElementPtr childNode ; childNode = (MSXML2::IXMLDOMElementPtr)(pXMLDoc->selectSingleNode("//AUTHOR")); //得到节点类型 MSXML2::DOMNodeType nodeType; childNode->get_nodeType(&nodeType); //节点名称 BSTR var; CString name; childNode->get_nodeName(&var); name = (char*)(_bstr_t)var; //节点值 VARIANT varVal; childNode->get_nodeTypedValue(&varVal); CString strValue = (char*)(_bstr_t)varVal; 读属性: //节点属性,放在链表中 MSXML2::IXMLDOMNamedNodeMapPtr pAttrs = NULL; MSXML2::IXMLDOMNodePtr pAttrItem; childNode = (MSXML2::IXMLDOMElementPtr)(pXMLDoc->selectSingleNode("//NUM")); childNode->get_attributes(&pAttrs); long nCount ; pAttrs->get_length(&nCount); for(int i = 0 ; i < nCount ; i++) { pAttrs->get_item(i,&pAttrItem); //我们可以通过函数get_nodeName,get_nodeTypedValue得到属性名和属性值 //也可以直接得到 CString strAttrName = (char*)(_bstr_t)pAttrItem->nodeName; CString strAttrValue = (char*)(_bstr_t)pAttrItem->nodeTypedValue; }另外可以用MSXML DOM 创建一个文档对象的过程。 HRESULT hr; IXMLDomDocument* pXMLDoc; IXMLDOMNode* pXDN; Hr=CoInitialize(NULL); //COM的初始化 hr=CoCreateInstance(CLSID_DOM Document,NULL,CLSCTX_INPPROC_SERVER, IID_IXMLDOMDocument,(void**) &pXMLDoc); hr=pXMLDoc->QueryInterface (IID_IXMLDOMNode,(void**)&pXDN); 使用文档中的createElement方法来创建一个节点装载和保存XML文件。通过load或者是loadXML方法可以从一个指定的URL来装载一个XML文档Save方法是用来把文档保存到一个指定的位置,用getElementsByTagName获得制定节点数据二、// 创建对象CoInitialize(NULL); // 初始化COM// 创建解析器实例CComPtr<IXMLDOMDocument> spXMLDOM; BSTR bstrItemText;// long value;CString strbuf;HRESULT hr=spXMLDOM.CoCreateInstance (_uuidof(DOMDocument));spXMLDOM->put_async(VARIANT_FALSE);spXMLDOM->put_validateOnParse(VARIANT_FALSE);spXMLDOM->put_resolveExternals(VARIANT_FALSE);spXMLDOM->put_preserveWhiteSpace(VARIANT_TRUE);_bstr_t path = _bstr_t(xmlPath);// 装载XML文档。hr=spXMLDOM->load(path);// 1、读取里面全部文本spXMLDOM->get_text(&bstrItemText); // newstrbuf = bstrItemText; // new// 2、读取一个节点_bstr_t bstrSS("paragraph");CComPtr<IXMLDOMNodeList> spParagraphs;spParagraphs=spXMLDOM->getElementsByTagName(bstrSS); //搜索"Paragrah"//是否正确的得到了指向IDOMNodeList的指针。hr = spParagraphs->get_length(&value); //得到所包含的NODE节点的个数if(SUCCEEDED(hr))…{ spParagraphs->reset(); for(int ii=0; ii<value; ii++) …{ CComPtr<IXMLDOMNode> spParagraph; //得到具体的一个NODE节点 // hr = spParagraphs->get_item(ii,&spParagraph); spParagraph = spParagraphs->nextNode(); if(SUCCEEDED(hr)) …{ spParagraph->get_text(&bstrItemText); //得到该节点相关的文本信息 strbuf += bstrItemText; strbuf += " "; } } }

⑸ 用C语言读写xml文件

都是文本格式的,我想与读txt的区别在于两种文件的组织方式不一样而已,xml应该理解为受一种格式限制的文本文件,按照这些格式多做一些逻辑处理就行吧

⑹ XML文件内容如何读取(C或C++)

可以用微软的IXMLDOMDocument2, 也可以用CMarkup,CMarkup可以在网上搜他怎么用,VS不自带的,要自己在网上下载代码。内感觉CMarkup更容易操作。注意容一点就是假如在一个根element下有多个子element,要注意读子element的顺序,从上往下读,不能从下往上读,它会读不到。 以CMarkup为例: CMarkup readXML; if( !readXML.load(xml文件名); return; readXML.FindElem("class");这时候可以用reaXML.GetData()取到132这个值

⑺ C# 读取修改xml文件

读取XML:XmlDocument doc= new XmlDocument();doc.Load("c:\\aa.xml");string path="ntsc/time/day";XmlNode node= doc.SelectSingleNode(path);string text=node.InnerText;//这个就是你的要的值了.修改:XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点 foreach(XmlNode xn in nodeList)//遍历所有子节点 { XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型 if(xe.GetAttribute("name")=="ApplePrice") { xe.SetAttribute("value","32");//32为修改后的值 break; } } xmlDoc.Save("bookstore.xml");//保存。

⑻ 使用c#如何读取xml文件

XmlReader和XmlTextReader类定义在System.XML名字空间中。XmlTextReader类源于XmlReader类。XmlTextReader类可用来读取XML文档。此类的Read方法读取此文档,直到其节点结束。在这篇文章里,将演示如何使用XmlTextReader类来读取一个XML文档及输出数据到控制台。加入名字空间引用因为Xml类都定义在System.Xml名字空间当中,所以首先要做的是在工程里加入对System.Xml的引用。using System.Xml;打开一个XML文档XmlTextReader类的构造器打开一个XML文件。在这个例子里使用了一个名为xmltest.xml的文件,它保存在C:\temp目录当中。你可以下载此附件。// 打开一个 XML 文件 XmlTextReader reader = new XmlTextReader("C:\\temp\\xmltest.xml");读取数据XmlTextReader类的Read方法读取数据。while ( reader.Read() ){Console.WriteLine(reader.Name);}源代码:附件CS CodeXML文件namespace ReadXML { using System; using System.Xml; public static int Main(string[] args) { try { // 打开一个 XML 文件 XmlTextReader reader = new XmlTextReader("C:\\temp\\xmltest.xml"); while ( reader.Read() ) { Console.WriteLine(reader.Name); } } catch (Exception e) { Console.WriteLine ("Exception: {0}", e.ToString()); } return 0; } } }

⑼ c# 读取xml文件

//加载XML文件 XmlDocument xml = new XmlDocument(); xml.Load(@"C:\Documents and Settings\Administrator\桌面\test\ConsoleApplication1\ConsoleApplication1\XMLTest.xml"); //选择所有的book节点 XmlNodeList xnl = xml.SelectNodes("//book"); //循环获取每个book节点的 genre publicationdate ISBN 属性 foreach (XmlNode xn in xnl) { string genre = xn.Attributes["genre"].Value; string publicationdate = xn.Attributes["publicationdate"].Value; string ISBN = xn.Attributes["ISBN"].Value; Console.WriteLine("genre:" + genre + " publicationdate:" + publicationdate + " ISBN:" + ISBN); } Console.ReadLine();

⑽ 使用c#如何读取xml文件

XmlTextReader类源于XmlReader类。XmlTextReader类可用来读取XML文档。此类的Read方法读取此文档,直到其节点结束。在这篇文章里,将演示如何使用XmlTextReader类来读取一个XML文档及输出数据到控制台。加入名字空间引用因为Xml类都定义在System.Xml名字空间当中,所以首先要做的是在工程里加入对System.Xml的引用。usingSystem.Xml;打开一个XML文档XmlTextReader类的构造器打开一个XML文件。在这个例子里使用了一个名为xmltest.xml的文件,它保存在C:\temp目录当中。你可以下载此附件。