using System.Text
using System.Xml
namespace ParsingXml
{
class Program
{
static void Main(string[] args)
{
XmlReader xmlReader = XmlReader.Create("c:/eurofxref-daily.xml")
while(xmlReader.Read())
{
if((xmlReader.NodeType == XmlNodeType.Element) &&(xmlReader.Name == "Cube"))
{
if(xmlReader.HasAttributes)
Console.WriteLine(xmlReader.GetAttribute("currency") + ": " + xmlReader.GetAttribute("rate"))
}
}
Console.ReadKey()
}
}
}
1.首先,我们正常使用Excel的另存为,看看能否顺利地直接另存为XML文件。
方法:
点击Excel左上角按钮,在d出的选项中,点击“另存为”
或者直接在Excel中按下快捷键F12
2.选择最后一项:其他格式。
3.接下来,重命名一下文件名,并选择文件类型为:
XML数据(*.xml)
4.点击“保存”按钮,会出现如下错误警告:
因为工作簿不包含任何XML映射,所以无法保存任何XML数据。
单击“帮助”以获取详细信息。
5.这个原因是我们的工作簿只是普通的Excel数据,的确没有做过XML映射,或者Excel数据也不是从XML文件导入的。
这时,我们尝试另存为另一种文件类型:
XML电子表格2003(*.xml)
6.点击保存按钮。
7.这时会d出一个兼容性对话框,问你是否保持工作簿的这种格式。
8.点击“是”,即可将Excel保存为XML格式的文档了。
我们使用软件打开这个XML文档(例如通过Chrome浏览器),发现格式正常,Excel数据也全在里面。
/* 前段时间恰好做过类似的东西,代码可以给你参考下。* Xml配置见最后
*/
typedef struct SrcFileFmt
{
int ColID
char ColCode[64] /* 字段英文名称 */
char ColName[128] /* 字段中文名称*/
char ColType[20] /* 字段类型(包含长度) */
char ColComment[128] /* 字段描述 */
}SrcFileFmt
int main(int argc, char **argv)
{
SrcFileFmt SrcFileFmt[128]
int iNum = -1
if ( 2 > argc )
{
printf("Usage: %s SrcXmlFile\n", argv[0])
return -1
}
iNum = parseSourceCfg(SrcCfgFile, SrcFileFmt)
if (iNum == -1)
{
return -1
}
return 0
}
/* 调用此函数后,xml文件的内容会被存储到结构体数组SrcFileFmt srcfilefmt[]中
* 此函数依赖于libxml2-2.9.2.tar.xz
*/
int parseSourceCfg(char *FileName, SrcFileFmt srcfilefmt[])
{ /* 解析源文件xml,FileName 为源xml文件名 */
xmlDocPtr doc
xmlNodePtr cur, root
char sFileName[64] = {'\0'}
int cnt = 0
if (FileName == NULL)
{
return -1
}
sprintf(sFileName, "%s.xml", FileName)
doc = xmlParseFile(sFileName)
if (doc == NULL)
{
return -1
}
root = xmlDocGetRootElement(doc)
if (root == NULL) {
xmlFreeDoc(doc)
return(-1)
}
if (xmlStrcmp(root->name, (const xmlChar *) "SrcRoot"))
{
xmlFreeDoc(doc)
return -1
}
cur = root->xmlChildrenNode
while (cur != NULL)
{
if ((!xmlStrcmp(cur->name, (const xmlChar *)"Column")))
{
xmlChar *key
xmlNodePtr cur_sub = cur
cur_sub = cur_sub->xmlChildrenNode
while (cur_sub != NULL)
{
if ((!xmlStrcmp(cur_sub->name, (const xmlChar *)"ColID"))) {
key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1)
killblank((char*)key)
srcfilefmt[cnt].ColID = atoi((char*)key)
xmlFree(key)
}
if ((!xmlStrcmp(cur_sub->name, (const xmlChar *)"ColCode"))) {
key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1)
killblank((char*)key)
strcpy(srcfilefmt[cnt].ColCode, (char*)key)
xmlFree(key)
}
else if ((!xmlStrcmp(cur_sub->name, (const xmlChar *)"ColName"))) {
key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1)
killblank((char*)key)
strcpy(srcfilefmt[cnt].ColName, (char*)key)
xmlFree(key)
}
else if ((!xmlStrcmp(cur_sub->name, (const xmlChar *)"ColType"))) {
key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1)
killblank((char*)key)
strcpy(srcfilefmt[cnt].ColType, (char*)key)
xmlFree(key)
}
else if ((!xmlStrcmp(cur_sub->name, (const xmlChar *)"ColComment"))) {
key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1)
killblank((char*)key)
strcpy(srcfilefmt[cnt].ColComment, (char*)key)
xmlFree(key)
}
cur_sub = cur_sub->next
}
cnt++
}
cur = cur->next
}
xmlFreeDoc(doc)
return cnt
}
<SrcRoot>
<Column>
<ColID>1</ColID>
<ColCode>kmh</ColCode>
<ColName>字段1</ColName>
<ColType>VARCHAR(11)</ColType>
</Column>
<Column>
<ColID>2</ColID>
<ColCode>dfkmh</ColCode>
<ColName>字段2</ColName>
<ColType>VARCHAR(11)</ColType>
</Column>
<Column>
<ColID>3</ColID>
<ColCode>hbh</ColCode>
<ColName>字段3</ColName>
<ColType>INTEGER(10)</ColType>
</Column>
</SrcRoot>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)