为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++ C
尚方宝剑之说 2019-05-24 19:15:04
用C语言读取xml文件,怎么实现?
查看完整描述

3 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

我上次才给人写过 

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);

}


查看完整回答
反对 回复 2019-05-26
?
富国沪深

TA贡献1790条经验 获得超9个赞

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

#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;

}


查看完整回答
反对 回复 2019-05-26
  • 3 回答
  • 0 关注
  • 1981 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信