Ⅰ 如何用c语言实现对xml文件的加密
把xml就当做一个普通的二进制文件
然后随便找一个加密算法
按照字节读入xml文件
然后按照加密算法进行加密转换,输出到目标文件就可以了
简单的 可以用异或方式。
Ⅱ C#里使用XML有什么好处
1)XML可以用于本地计算的数据。传递到桌面的数据可以进行本地计算。XML解析器可以读取数据,并将它递交给本地应用程序(例如浏览器)进一步查看或处理。数据也可以由使用XML对象模型的脚本或其它编程语言来处理。
2)可以为用户提供正确的结构化数据视图。传递到桌面的数据可以以多种方式表示。本地数据集,可以根据用户喜好和配置等因素,以适当的形式在视图中动态表现给用户。
3)允许集成不同来源的结构化数据。使用代理可在中间层服务器上集成来自后端数据库和其它应用程序的数据,使该数据能够传递给桌面或者其它服务器,做进一步处理。
4)描述来自多种应用程序的数据。由于 XML 是可扩展的,因此它可以用于描述来自多种应用程序的数据,即使没有数据的内置描述,也能够接收和处理数据。
5)通过粒度更新来提高性能。XML 允许粒度更新。开发人员不必在每次改动时都发送整个结构化数据集。有了粒度更新后,只有改变的元素才从服务器发送到客户机。
Ⅲ 请问怎么用C解析XML文件
你可以从网上下载相应版本的XML应用库,然后,编译程序时,调用其中的函数进行XML文件解析。
如果是简单的XML文件,或只是进行少量的数据存取,也可以自己写相应的取值、赋值函数进行数据操作。
Ⅳ 如何用shell脚本修改XML文件
通过shell脚本修改xml文件中的某行记录
跟之前一样,假设有如下的xml文件:
web.xml中有如下内容:
[html] view plain
cookieName
sessionName
需求:现在需要利用shell脚本替换掉cookieName对应的value值,
利用shell实现方式如下:
shell脚本部分:
declare -i Dline
getline()
{
grep -n "cookieName" ${DOMAIN_HOME}/portal/ROOT/WEB-INF/web.xml | head -1 |
cut -d ":" -f 1;
}
getlinenum()
{
awk "BEGIN{a=`getline`;b="1";c=(a+b);print c}";
}
Dline=`getlinenum`;
echo "line is ${Dline}";
sed -i "${Dline},${Dline}s/.*/ \替换的value值\<\/param-value\>/g"
path/web.xml
说明:这个跟之前的替换属性文件的区别在于,这个是精确定位到行的,然后替换正行code。
这个xml和properties 中都是默认需要替换的内容是唯一的。
Ⅳ 怎么用C语言写一个简单的XML文件
用VC吧,下面有一个例子,你参照下:
voidCreateXml()
{
CoInitialize(NULL);
//创建文档
MSXML2::IXMLDOMDocument2PtrpXMLDoc=NULL;
//创建DOMDocument对象
HRESULThr=pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));
if(!SUCCEEDED(hr))
{
return;
}
//
MSXML2::=NULL;
pXMLProc=pXMLDoc->createProcessingInstruction("xml","version='1.0'encoding='UTF-8'");
_variant_tvNullVal;
vNullVal.vt=VT_NULL;
pXMLDoc->insertBefore(pXMLProc,vNullVal);
//创建根结点
_variant_tvarNodeType((short)MSXML2::NODE_ELEMENT);
MSXML2::IXMLDOMNodePtrpXMLNodeRoot=NULL;
pXMLNodeRoot=pXMLDoc->createNode(varNodeType,_T("Cases"),_T(""));
//添加根结点
pXMLDoc->appendChild(pXMLNodeRoot);
//创建并添加下级结点
MSXML2::IXMLDOMNodePtrpXMLNodeNode=NULL;
pXMLNodeNode=pXMLNodeRoot->appendChild(pXMLDoc->createElement(_T("Case")));
//创建下级元素结点
MSXML2::IXMLDOMElementPtrpXMLEle=NULL;
pXMLEle=pXMLDoc->createElement(_T("CopyFile"));
//创建并设置下级结点属性
MSXML2::IXMLDOMAttributePtrpXMLAttr=NULL;
pXMLAttr=pXMLDoc->createAttribute(_T("src"));
pXMLAttr->nodeTypedValue="C:\test.txt";
pXMLEle->attributes->setNamedItem(pXMLAttr);
pXMLAttr=pXMLDoc->createAttribute(_T("dest"));
pXMLAttr->nodeTypedValue="D:\Test.txt";
pXMLEle->attributes->setNamedItem(pXMLAttr);
//添加元素结点
pXMLNodeNode->appendChild(pXMLEle);
MSXML2::IXMLDOMElementPtrpXMLEle1=NULL;
pXMLEle1=pXMLDoc->createElement(_T("DelFile"));
pXMLEle1->appendChild(pXMLDoc->createTextNode("C:\test.txt"));
//添加元素结点
pXMLNodeNode->appendChild(pXMLEle1);
//保存文档
pXMLDoc->save(_T("d:\Test.xml"));
}
效果如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<Cases>
<Case>
<CopyFilesrc="C: est.txt"dest="D:Test.txt"/>
<DelFile>C: est.txt</DelFile>
</Case>
</Cases>
为了能够让MFC认识MSXML2,我们需要引入相应的dll,代码如下;
#import "msxml4.dll"
Ⅵ 用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);
}
Ⅶ 如何在C 实现自定义XML序列化问题,怎么解决
对于字符串,你有一些选择;xml可以简单地用 XmlSerializer ( 或者 DataContractSerializer,但它提供了对xml的更少控制) 或者 JSON (JSON.net, 等来完成。
XmlSerializer的典型类看起来很简单:
public class Apple {
public string Variety {get;set;}
public decimal Weight {get;set;}//etc}
( 注意我也希望上面的Json.NET 也能工作)
上面的类还应该在数据绑定场景中工作良好,这是由于。
你将序列化:
Apple obj = new Apple { Variety ="Cox", Weight = 12.1M};
XmlSerializer ser = new XmlSerializer(typeof(Apple));
StringWriter sw = new StringWriter();
ser.Serialize(sw, obj);
string xml = sw.ToString();
StringReader sr = new StringReader(xml);
Apple obj2 = (Apple)ser.Deserialize(sr);
但是你可以自定义 xml:
[XmlType("apple"), XmlRoot("apple")]public class Apple {
[XmlAttribute("variety")]
public string Variety {get;set;}
[XmlAttribute("weight")]
public decimal Weight {get;set;}//etc}
DataContractSerializer 是最理想的,更喜欢:
[DataContract]public class Apple {
[DataMember]
public string Variety {get;set;}
[DataMember]
public decimal Weight {get;set;}}
Ⅷ c语言如何调用xml的接口函数
/***************
<?xmlversion="1.0"encoding="utf-8"?>
<Cases>
<case>
<No>001</No>
<CopyFilesrc="C: est.txt"dest="D: est.txt"></CopyFile>
</case>
<case>
<No>002</No>
<DelFile>C: est.txt</DelFile>
</case>
</Cases>
*******************/
//我们用MFC来读取上述xml,代码如下:
voidReadXml(CStringstrXmlPath)
{
MSXML2::IXMLDOMDocumentPtrpDoc;
::CoInitialize(NULL);
HRESULThr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
if(!SUCCEEDED(hr))
{
MessageBox(_T("创建DOMDocument对象失败。 请检查运行环境"),_T("错误"),MB_ICONERROR);
return;
}
//读取xml
pDoc->put_async(VARIANT_FALSE);
VARIANT_BOOLbhr=pDoc->load((_variant_t)strXmlPath);
if(bhr!=VARIANT_TRUE){
MessageBox(_T("无法正确读取xml文件"),_T("错误"),MB_ICONERROR);
return;
}
//根节点取得
MSXML2::IXMLDOMElementPtrroot=pDoc->documentElement;
//取得根节点的名字
_variant_tstrRootName=root->nodeName;
_bstr_twstrRootName(strRootName.bstrVal);
MSXML2::IXMLDOMNodeListPtrnodeList=root->GetchildNodes();//cases
//解析cases的子节点
ReadCases(nodeList);
}
voidReadCases(MSXML2::IXMLDOMNodeListPtrnodeList)
{
intilength=nodeList->Getlength();
for(intnodeCount=0;nodeCount<ilength;nodeCount++){
MSXML2::IXMLDOMNodePtrnodePtr=nodeList->nextNode();
_variant_tstrNodeName=nodePtr->GetnodeName();
_variant_tstrNodeValue=nodePtr->GetnodeValue();
//读取case节点下的子节点
ReadCase(nodePtr->GetchildNodes());
}
}
voidReadCase(MSXML2::IXMLDOMNodeListPtrnodeList)
{
CStringstrLogInfo;
strLogInfo.Empty();
CStringstrNo;//case编号
CStringstrSrcFile;//源文件
CStringstrDestFile;//目标文件
for(intnodeCount=0;nodeCount<nodeList->Getlength();nodeCount++)
{
MSXML2::IXMLDOMNodePtrnodePtr=nodeList->nextNode();
_variant_tstrCaseNodeName=nodePtr->GetnodeName();
_variant_tstrCaseNodeValue=nodePtr->Gettext();
BSTRbStrTemp=strCaseNodeName.bstrVal;
CStringstrTemp=CString(bStrTemp);
SysFreeString(bStrTemp);
CStringstrNodeName=strTemp;
//节点的值,如何取得?
if(0==strNodeName.CompareNoCase(_T("NO")))
{
strNo=(BSTR)strCaseNodeValue.pbstrVal;
//取得的值可以打印出来
printf(strNo);
}
//节点有属性值,该怎么处理?
elseif(0==strNodeName.CompareNoCase(_T("CopyFile")))
{
strSrcFile.Empty();
strDestFile.Empty();
//取得节点的属性值
MSXML2::=nodePtr->Getattributes();
for(intj=0;j<pDOMAttrList->Getlength();j++)
{
MSXML2::IXMLDOMNodePtrpDOMAttr=pDOMAttrList->Getitem(j);
//取得源文件路径
if(CompareNoCase((char*)pDOMAttr->GetnodeName(),_T("src")))
{
strSrcFile=pDOMAttr->GetnodeTypedValue();
//取得目标文件路径
}elseif(CompareNoCase((char*)pDOMAttr->GetnodeName(),_T("dest")))
{
strDestFile=pDOMAttr->GetnodeTypedValue();
}
CopyFile(strSrcFile,strDestFile,FALSE);
}
elseif(0==strNodeName.CompareNoCase(_T("DelFile")))
{
strDestFile.Empty();
strDestFile=CString((BSTR)strCaseNodeValue.pbstrVal);
DeleteFile(strDestFile);
}
}
}
//为了能够让MFC认识MSXML2,我们需要引入相应的dll,代码如下;
#import"msxml4.dll"
Ⅸ 怎么用c语言解析xml文件
我上次才给人写过
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);
}
补充:你这个就说得太笼统了,
1 你上传的xml文件具体格式是什么?
2 要在网页上显示的具体格式是什么
3 你根本不知道怎么做 所以也不知道怎么问
我不用关心你的c语言的cgi吧?我才不管是用什么上传的
只有你说的嵌入式三个字 给我一点有用信息 就是解析这个xml用插件恐怕是不行
只能C语言
4 我现在只要求你的xml文件格式和 网页上要显示哪些xml中解析出来的信息
只要知道这些 我只需要在我的程序上加上生成html文件就行了
Ⅹ c语言如何解析xml并将所有内容存入数组
/*前段时间恰好做过类似的东西,代码可以给你参考下。
*Xml配置见最后
*/
typedefstructSrcFileFmt
{
intColID;
charColCode[64];/*字段英文名称*/
charColName[128];/*字段中文名称*/
charColType[20];/*字段类型(包含长度)*/
charColComment[128];/*字段描述*/
}SrcFileFmt;
intmain(intargc,char**argv)
{
SrcFileFmtSrcFileFmt[128];
intiNum=-1;
if(2>argc)
{
printf("Usage:%sSrcXmlFile ",argv[0]);
return-1;
}
iNum=parseSourceCfg(SrcCfgFile,SrcFileFmt);
if(iNum==-1)
{
return-1;
}
return0;
}
/*调用此函数后,xml文件的内容会被存储到结构体数组SrcFileFmtsrcfilefmt[]中
*此函数依赖于libxml2-2.9.2.tar.xz
*/
intparseSourceCfg(char*FileName,SrcFileFmtsrcfilefmt[])
{/*解析源文件xml,FileName为源xml文件名*/
xmlDocPtrdoc;
xmlNodePtrcur,root;
charsFileName[64]={'