Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c中使用gnome libxml库将csv文件转换为xml文件时遇到问题_C_Xml_Csv_Libxml2 - Fatal编程技术网

在c中使用gnome libxml库将csv文件转换为xml文件时遇到问题

在c中使用gnome libxml库将csv文件转换为xml文件时遇到问题,c,xml,csv,libxml2,C,Xml,Csv,Libxml2,当我尝试将以下csv文件转换为xml文件时,我得到了以下xml文件。我有三个问题: xml文件中学生状态值旁边的奇怪字符是什么? 我在xml文件中看不到一些csv列。 我尝试将0放入xml文件中,而csv文件中的列没有值。我如何才能做到这一点? 注:这是一个家庭作业 csv文件: 学生ID、学生姓名、学生姓氏、课程代码、课程学分、MID1、MID2、HW1、HW2、HW3、期末、年级、状态 2015700001,梅苏特,加VGA,CME2202,3,68,74,80,75,65,70,CB,成

当我尝试将以下csv文件转换为xml文件时,我得到了以下xml文件。我有三个问题:

xml文件中学生状态值旁边的奇怪字符是什么? 我在xml文件中看不到一些csv列。 我尝试将0放入xml文件中,而csv文件中的列没有值。我如何才能做到这一点? 注:这是一个家庭作业

csv文件:

学生ID、学生姓名、学生姓氏、课程代码、课程学分、MID1、MID2、HW1、HW2、HW3、期末、年级、状态 2015700001,梅苏特,加VGA,CME2202,3,68,74,80,75,65,70,CB,成功 2015700001,Mesut,GAVGA,CME3004,4,36,32,0,0,40,FF,失败 2015700001,梅苏特,加VGA,CME2206,3,80,75,85,78,70,82,BB,成功 2015700001,梅苏特,加VGA,CME2204,3,90,90100,96,88,85,AA,成功 2016700018,梅尔夫·拉纳,萨里,CME2202,3,0,0,0,0,D,缺席 2016700018,梅尔夫·拉纳,萨里,CME2204,3,55,57,0,66,60,48,DC,成功 2016700018,梅尔夫·拉纳,萨里,CME2206,3,60,65,70,70,63,60,CC,成功 2015700022,最低点,ÖZCAN,CME2202,3,98,95,98,90,92,85,AA,成功 2015700022,最低点,ÖZCAN,CME3004,4,85,90,88,90,90,AA,成功 2015700022,最低点,ÖZCAN,CME2206,3,90,78,95,90,88,92,AA,成功 2011年7月19日,塔特利市迈赫迈特·埃敏,CME2204,3,20,12,0,25,0,30,FF,失败 2011年7月19日,塔特利州迈赫迈特·埃敏,CME2206,3,15,0,0,0,0,D,缺席 2015700030,阿里,萨曼利,CME2202,3,82,77100,98100,68,英国航空公司,成功 2015700030,阿里,萨曼利,CME3004,4,76,80,80,80,67,BB,成功 2015700030,阿里,萨曼利,CME3006,4,80,70,75,75,BB,成功 2015700030,阿里,萨曼利,CME2204,3,90,94,95,90,88,80,AA,成功 2015700031,塞林,贝图尔,CME2202,3,40,38,0,20,25,26,FF,故障 2015700031,塞林,贝图尔,CME3004,4,65,60,72,65,58,CC,成功 2015700031,塞林,贝图尔,CME2204,3,60,48,50,52,50,60,DC,成功 2016700020,奥乌尔坎,奥扎尔斯兰,CME2202,3,65,80100100,95,85,英国航空公司,成功 2016700020,奥乌尔坎,奥扎尔斯兰,CME2206,3,86,88,90,90100100,AA,成功 2015700042,Murat,GÜREL,CME2204,3,40,0,0,50,20,38,FF,失败 2015700042,Murat,GÜREL,CME2202,3,71,63,65,74,70,60,CB,成功 2016700035,Sercan,ERGÖRMÜŞ,CME3006,4100,100,95,88,AA,成功 2016700036,巴基斯坦切拉,CME3006,4,47,52,60,38,DD,成功 2016700036,巴基斯坦切拉,CME2206,3,0,0,0,0,0,D,缺席 2016700036,巴基斯坦切拉,CME2204,3,8,18,0,25,50,35,FF,失败 2016700037,克里姆,凯纳尔,CME2206,3,70,75,80,80,72,75,BB,成功 2016700037,克里姆,凯纳尔,CME2204,3,80,80,85,56,70,48,CB,成功 2016700050,Eda,CANSEVER,CME3006,4,45,70,70,70,94,BB,成功 2015700081,奥肯,塔纳,CME2204,3,95,88,70,86100,75,英国航空公司,成功 2015700081,奥肯,塔纳,CME2206,3100100,98,98,80100,AA,成功 2016700052,Ceren,ÖZTÜRK,CME3004,4,50,0,65,40,45,DC,失败 2015700085,塔尔克,巴宝路,CME2202,3,0,0,0,0,0,D,缺席 输出xml文件:

2015700001 梅苏特 加夫加 CME2202 3. 68 74 80 75 65 70 CB 成功13岁; 2015700001 梅苏特 加夫加 CME3004 4. 36 32 0 0 00 0 2015700001 梅苏特 加夫加 CME2206 3. 80 75 85 78 70 82 BB 成功13岁; 2015700001 梅苏特 加夫加 CME2204 3. 90 90 100 96 88 85 AA 成功13岁; 2016700018 梅尔夫拉纳 莎丽 CME2202 3. 0 0 0 0 0 0 D 缺席&13; 2016700018 梅尔夫拉纳 莎丽 CME2204 3. 55 57 0 66 60 48 直流 成功13岁; 2016700018 梅尔夫拉纳 莎丽 CME2206 3. 60 65 70 70 63 60 科科斯群岛 成功13岁; 2015700022 最低点 ÖZCAN CME2202 3. 98 95 98 90 92 85 AA 成功13岁; 2015700022 最低点 ÖZCAN CME3004 4. 85 90 88 90 00 0 2015700022 最低点 ÖZCAN CME2206 3. 90 78 95 90 88 92 AA 成功13岁; 2016700019 梅米特·埃敏 塔特利 CME2204 3. 20 12 0 25 0 30 FF 失败&13; 2016700019 梅米特·埃敏 塔特利 CME2206 3. 15 0 0 0 0 0 D 缺席&13; 2015700030 阿里 萨曼利 CME2202 3. 82 77 100 98 100 68 文学士 成功13岁; 2015700030 阿里 萨曼利 CME3004 4. 76 80 80 80 00 0 2015700030 阿里 萨曼利 CME3006 4. 80 00 0 2015700030 阿里 萨曼利 CME2204 3. 90 94 95 90 88 80 AA 成功13岁; 2015700031 塞林 贝图尔 CME2202 3. 40 38 0 20 25 26 FF 失败&13; 2015700031 塞林 贝图尔 CME3004 4. 65 60 72 65 00 0 2015700031 塞林 贝图尔 CME2204 3. 60 48 50 52 50 60 直流 成功13岁; 2016700020 奥乌尔坎 ÖZARSLAN CME2202 3. 65 80 100 100 95 85 文学士 成功13岁; 2016700020 奥乌尔坎 ÖZARSLAN CME2206 3. 86 88 90 90 100 100 AA 成功13岁; 2015700042 穆拉特 GÜREL CME2204 3. 40 0 0 50 20 38 FF 失败&13; 2015700042 穆拉特 GÜREL CME2202 3. 71 63 65 74 70 60 CB 成功13岁; 2016700035 塞尔坎 厄尔格ÖRMÜŞ CME3006 4. 100 00 0 2016700036 圣奥拉 巴基斯坦 CME3006 4. 47 00 0 2016700036 圣奥拉 巴基斯坦 CME2206 3. 0 0 0 0 0 0 D 缺席&13; 2016700036 圣奥拉 巴基斯坦 CME2204 3. 8. 18 0 25 50 35 FF 失败&13; 2016700037 克里姆 基纳尔 CME2206 3. 70 75 80 80 72 75 BB 成功13岁; 2016700037 克里姆 基纳尔 CME2204 3. 80 80 85 56 70 48 CB 成功13岁; 2016700050 Eda 坎瑟夫 CME3006 4. 45 00 0 2015700081 奥肯 塔纳 CME2204 3. 95 88 70 86 100 75 文学士 成功13岁; 2015700081 奥肯 塔纳 CME2206 3. 100 100 98 98 80 100 AA 成功13岁; 2016700052 杰伦 ÖZTÜRK CME3004 4. 50 0 65 40 00 0 2015700085 焦油ık 巴宝路 CME2202 3. 0 0 0 0 0 0 D 缺席&13; C源代码:

包括 包括 包括 包括 包括 定义缓冲区大小1000 int main argc,char*argv[] { xmlNodePtr root=NULL,node=NULL; xmlDocPtr文件; xmlDtdPtr-dtd; doc=xmlNewDocBAD_CAST 1.0; root=xmlNewNodeNULL,错误的学生信息; xmlDocSetRootElementdoc,root; 文件*freadptr; 文件*fwriteptr; 字符*令牌; 字符*2; 字符*行; 字符*标签[13]; 字符*文本[13]; char buf1[缓冲区大小]; char buf2[缓冲区大小]; int i=0; int j=0; freadptr=fopeninput.csv,r; fwriteptr=fopenödev.xml,w; iffreadptr==NULL { printfError正在读取文件\n; 返回-1; } fgetsbuf1,缓冲区大小,freadptr; //printf%s,buf1; 令牌=strtokbuf1\n; whiletoken!=NULL { //printf%s |,令牌; 标记[i]=令牌; 令牌=strtokNULL\n; i++; } 当设置为SBUF2时,缓冲区大小为FREADTR { 字符*字段; i=0; 直线=buf2; //令牌2=strep&line\n; whilefield=strep&line\n!=NULL { ifstrcmpfield,==0 { //标记2=0; strcpyfield,0; } //printfield=%s | |,字段; 文本[i]=字段; i++; } j=0; node=xmlNewChildroot,NULL,错误的学生,错误的学生,错误的NULL; 对于j=0;j1该有趣的字符是一个\r,它与文件中的\n一起是行尾标记的一部分。可能最容易将其添加到要拆分行的内容列表中

2这很可能是因为某些标题生成了无效的标记,即学生ID。标记名中不能有空格-您应该检查标记中的每个字符串,并用下划线替换所有空格和其他无效字符,或者仅删除它们

3strep并没有创建新字符串,它只是获取buf2并在其中返回不同的指针。所以你没法进入它。而是将检查移动到XML创建中,只需执行以下操作

xmlNewChild(node, NULL, BAD_CAST tags[j], BAD_CAST "0");

一致性是编程的关键。如果键入FILE*x和char*y,则表示不一致。您必须使用两者中的一种,当然也要使用不会导致混淆的正确方法,即键入*variable;。好的,现在回答您的问题:解释一下这些,我在xml文件中看不到一些csv列。?对于这样一个简单的情况,您并不真正需要libxml,尽管它确保了正确性,但实际上并不需要它,它实际上添加了一个依赖项。