问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

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

发布网友 发布时间:2022-04-27 01:42

我来回答

4个回答

热心网友 时间:2022-06-22 03:04

xml文件和txt文件相同,使用普通的文本操作函数即可读取。

1、C语言标准库提供了一系列文件操作函数。文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件操作位置的获取与设置。
2、例程:

#include<stdio.h>
int a;
char b,c[100];
int main(){
    FILE * fp1 = fopen("input.xml", "r");//打开xml格式输入文件
    FILE * fp2 = fopen("output.txt", "w");//打开输出文件
    if (fp1==NULL || fp2==NULL) {//若打开文件失败则退出
        puts("不能打开文件!");
        rturn 0;
    }
    fscanf(fp1,"%d",&a);//从输入文件读取一个整数
    b=fgetc(fp1);//从输入文件读取一个字符
    fgets(c,100,fp1);//从输入文件读取一行字符串
    
    printf("%ld",ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数
    
    fputs(c,fp2);//向输出文件写入一行字符串
    fputc(b,fp2);//向输出文件写入一个字符
    fprintf(fp2,"%d",a);//向输出文件写入一个整数
    
    fclose(fp1);//关闭输入文件
    fclose(fp2);//关闭输出文件,相当于保存
    return 0;
}

热心网友 时间:2022-06-22 03:05

我上次才给人写过 
xml文件内容

<?xml version="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|]
Press any key to continue

代码

#include <stdio.h>
#include <string.h>
main()
{
 int i=0;
 FILE *fp;
 char szFileBuff[1024] = {0}, szBuff[100][1024];
 char id[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("read XML file error!\n");
 }
 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]\n",i++, szBuff);
  }
 }
 fclose(fp);
}

热心网友 时间:2022-06-22 03:05

用System.xml命名空间

热心网友 时间:2022-06-22 03:06

/**/
/// <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;
}
如何获取xml文件的层级结构 c

char b,c[100];int main(){ FILE * fp1 = fopen("input.xml", "r");//打开xml格式输入文件 FILE * fp2 = fopen("output.txt", "w");//打开输出文件 if (fp1==NULL || fp2==NULL) {//若打开文件失败则退出 puts("不能打开文件!");rturn 0;} fscanf(fp1,"%d",&amp;a);//从...

c语言如何解析xml并将所有内容存入数组

FileName 为源xml文件名 */ xmlDocPtr doc; xmlNodePtr cur, root; char sFileName[64]

在c语言程序设计中如何读取xml文件

同意一楼,如果纯C的话,好像只能文本解析了。否则可以用很多现成的xml解析器,比如ms的msxml 4.0

C语言 如何读取xml文件中的数据并存入一个结构体中

一般是用第三方比如TinyXml,或者你自己实现。

怎么用c语言解析xml文件

xml文件内容 &lt;?xml version="1.0" encoding="UTF-8" ?&gt; - &lt;aicomoa_response&gt; - &lt;country_list&gt; - &lt;country&gt; &lt;id&gt;7&lt;/id&gt; &lt;pid&gt;0&lt;/pid&gt; &lt;continent_id&gt;1&lt;/continent_id&gt; &lt;guohao&gt;93&lt;/guohao&gt; &lt;cntitle&gt;阿富汗&lt;/cntitle&gt; &lt;entitle&gt;Afghanistan&lt;/entitle&gt; &lt;hztitle&gt;阿富汗&lt;/hztitle&gt;...

C语言怎么读取MP3文件播放时长,请给出具体算法

回答:mp3文件的持续时间等信息,都是文件的meta信息里,你最好早一个专门的库来读这些信息或者你使用mediainfo,解析这些信息为xml输出,再解析xml就可以了

C语言高速读大文件、写大文件的方式

写文件一般是追加快些 如果你要输出例如XML。还有,每个进程应该有4G,靠操作系统内存管理+页面文件维持、还有,开个几百M的数组不划算、用malloc+free快些,可以动态的,不让操作系统在加载时就开辟几百M,而是陆续的开——除非你在写汇编程序——汇编向OS申请内存很费劲,要 SYSCALL ...

c语言怎么加载自己写的配置文件

这个问题和c语言关系不是太大。保存和加载配置的方式有很多,看你的平台处理能力以及配置复杂度了,如果是很复杂的情况,可以使用sqlite数据库;一般也可以用json/xml/ini等通用格式;简单点可以直接用文本文件,或者二进制文件保存自定义格式。前面两种方式可以用相关的库处理,后面这种就自己写了,方便调试...

用c语言读取xml文件中的变量

我这边有c++编写的读取xml中变量的类.(是用一个工具生成的代码,针对特定格式的XmL文件)呵呵,如果你用c写而不能用cpp文件的话,我就不能帮你了.

c语言中如何从文件里读取一段字符串,至换行符

fgets读取一行,fgetc读取一个字符,fread读取你想要的长度 FILE *fp = fopen(fileName,"r");if (fp != NULL){ char buf[1024] = {0};fgets(buf,fp);} fclose(fp);

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
follow the doctor's advice为什么加's ...张娜拉的一首歌 我想学这首歌,把歌词转换成中文的,但是唱出来让人感... 我有一辆宝骏530车,外地牌子,在济南找工作带车,能干什么工作... 怎样判断小米路由器的指示灯是什么颜色的? 定期储蓄存单是什么 小型天文卫星携带仪器 公司给入了工伤保险保险公司问我要我的社保卡做什么可以吗? 出下列各种烷烃的结构简式(1)2,3,3-三甲基戊烷:___(2)2,3-二甲基-4... 我叫邢轲轲 女 英文怎么起个名字呢 类似kiki coco的英文名,哪些好? 使用c#如何读取xml文件 贷款风控部的具体职责是什么? 车贷公司的风控部的主要工作是什么? 怎样将QQ好友添加到桌面? 怎样把QQ上的好友移到桌面上来 把20来张图片合成一张怎么弄? 怎么把qq联系人添加到手机桌面? 网盘里的唉怎么改rom是7z格式的, 怎么把百度网盘里的7Z资源移到解压软件里面? CF的烟雾弹怎么调节分辨率 cf烟雾头清楚调法。XP系统的 xp系统cf烟雾头怎么调,我要最新的 CF windows xp 烟雾头 怎么调效果最好 CF如何调电脑分辨率让烟雾效果淡一点拜托各位大神 请问中国银行个人二手住房贷款利率是多少? CFXP系统究竟怎样调烟雾头?我的屏幕分辨率是1600*900、改了后其他图标就会变得好大 中国银行个人一手住房贷款利率怎么计算? 电脑开机后黑屏,有好多英文字母,连鼠标箭头都没有,按F8也没用 CF烟雾头屏幕分辨率C里怎么调? 请告诉我中国银行个人二手住房贷款利率是多少? 使用c#如何读取xml文件?? 如何用C++读入XML文档? 中国建立统一战线是什么时候? 中国第一次统一是什么时候? 中国是什么时候开始统一语言的? 中国什么时候能够统一?有生之年还能看得到吗? 小规模纳税人到地税局申请代开房屋租赁发票税率是多少 小规模纳税人开专用发票租赁费的税点多少 中国摇钱古卜讲义小说txt全集免费下载 朱辰彬六爻书籍有几本 求朱辰彬关于&lt;&lt;周易&gt;&gt;的两本书 中国摇钱古卜讲义的作品目录 请问朱辰彬的六爻书哪有正版出售? 学习易经的系统是什么,先学系辞还是六十四卦 怎么学才有效果好啊!我是先学易经在学六爻预测,这个方 六爻问婚姻感情,但是问的内容不同,算一事多问吗。还准吗 六爻大师中王虎应和朱辰彬哪个厉害?有什么不同?哪个容易理解? 中国摇钱古卜讲义txt全集下载 中国摇钱古卜讲义是研究六爻的吗 外地车进石家庄有限制吗 石家庄外地车限行时间和范围
  • 焦点

最新推荐

猜你喜欢

热门推荐