xml文件c语言读取函数 c#读xml文件

c语言如何调用xml的接口函数

/***************

创新互联建站专注于铁岭企业网站建设,成都响应式网站建设公司,商城网站定制开发。铁岭网站建设公司,为铁岭等地区提供建站服务。全流程定制开发,专业设计,全程项目跟踪,创新互联建站专业和态度为您提供的服务

?xml version="1.0" encoding="utf-8"?

Cases

case

No001/No

CopyFile src="C:\test.txt" dest="D:\test.txt"/CopyFile

/case

case

No002/No

DelFileC:\test.txt/DelFile

/case

/Cases

*******************/

// 我们用MFC来读取上述xml,代码如下:

void ReadXml(CString strXmlPath)

{

MSXML2::IXMLDOMDocumentPtr pDoc;

::CoInitialize(NULL);

HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); 

if (!SUCCEEDED(hr)) 

{  

MessageBox(_T("创建DOMDocument对象失败。\n请检查运行环境"), _T("错误"), MB_ICONERROR); 

return;

}

// 读取xml

pDoc-put_async(VARIANT_FALSE);

VARIANT_BOOL bhr = pDoc-load((_variant_t)strXmlPath);

if (bhr != VARIANT_TRUE) {

MessageBox(_T("无法正确读取xml文件"), _T("错误"), MB_ICONERROR);

return;

}

// 根节点取得

MSXML2::IXMLDOMElementPtr root = pDoc-documentElement;

// 取得根节点的名字

_variant_t strRootName = root-nodeName;

_bstr_t wstrRootName(strRootName.bstrVal);

MSXML2::IXMLDOMNodeListPtr nodeList = root-GetchildNodes();//cases

// 解析cases的子节点

ReadCases(nodeList);

}

void ReadCases(MSXML2::IXMLDOMNodeListPtr nodeList)

{

int ilength = nodeList-Getlength();

for (int nodeCount = 0; nodeCount  ilength; nodeCount++) {

MSXML2::IXMLDOMNodePtr nodePtr = nodeList-nextNode();

_variant_t strNodeName = nodePtr-GetnodeName();

_variant_t strNodeValue = nodePtr-GetnodeValue();

// 读取case节点下的子节点

ReadCase(nodePtr-GetchildNodes());

}

}

void ReadCase(MSXML2::IXMLDOMNodeListPtr nodeList)

{

CString strLogInfo;

strLogInfo.Empty();

CString strNo;              // case编号

CString strSrcFile;         // 源文件

CString strDestFile;        // 目标文件

for (int nodeCount = 0; nodeCount  nodeList-Getlength(); nodeCount++)

{

MSXML2::IXMLDOMNodePtr nodePtr = nodeList-nextNode();

_variant_t strCaseNodeName = nodePtr-GetnodeName();

_variant_t strCaseNodeValue = nodePtr-Gettext();

BSTR bStrTemp = strCaseNodeName.bstrVal;

CString strTemp = CString(bStrTemp);

SysFreeString(bStrTemp);

CString strNodeName = strTemp;

//  节点的值,如何取得?

if (0 == strNodeName.CompareNoCase(_T("NO")))

{

strNo = (BSTR)strCaseNodeValue.pbstrVal;

// 取得的值可以打印出来

printf(strNo);

}

// 节点有属性值,该怎么处理?

else if (0 == strNodeName.CompareNoCase(_T("CopyFile")))

{

strSrcFile.Empty();

strDestFile.Empty();

// 取得节点的属性值

MSXML2::IXMLDOMNamedNodeMapPtr pDOMAttrList= nodePtr-Getattributes();

for (int j = 0; j  pDOMAttrList-Getlength(); j++)

{

MSXML2::IXMLDOMNodePtr pDOMAttr= pDOMAttrList-Getitem(j); 

// 取得源文件路径

if (CompareNoCase((char*)pDOMAttr-GetnodeName(), _T("src")))

{

strSrcFile = pDOMAttr-GetnodeTypedValue();

// 取得目标文件路径

} else if (CompareNoCase((char*)pDOMAttr-GetnodeName(), _T("dest")))

{

strDestFile =pDOMAttr-GetnodeTypedValue();

}

CopyFile(strSrcFile, strDestFile, FALSE);

}

else if (0 == strNodeName.CompareNoCase(_T("DelFile")))

{

strDestFile.Empty();

strDestFile = CString((BSTR)strCaseNodeValue.pbstrVal);

DeleteFile(strDestFile);

}

}

// 为了能够让MFC认识MSXML2,我们需要引入相应的dll,代码如下;

#import "msxml4.dll"

怎样用vc++读写xml文件

用微软的 DOM,

MSXML4

//引入msxml4.dll

#import "C:/WINNT.0/system32/msxml4.dll"

//创建XMLDOMDocument指针

MSXML2::IXMLDOMDocumentPtr pXMLDoc;

// 初始化COM接口

::CoInitialize(NULL);

// 通过智能指针创建一个解析器的实例

HRESULT hr;

hr =pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));

//加载文件

pXMLDoc-load("f://he.xml");

//在树中查找名为City的节点,"//"表示在任意一层查找

MSXML2::IXMLDOMElementPtr childNode ;

childNode = (MSXML2::IXMLDOMElementPtr)(pXMLDoc-selectSingleNode("//AUTHOR"));

//得到节点类型

MSXML2::DOMNodeType nodeType;

childNode-get_nodeType(nodeType);

//节点名称

BSTR var;

CString name;

childNode-get_nodeName(var);

name = (char*)(_bstr_t)var;

//节点值

VARIANT varVal;

childNode-get_nodeTypedValue(varVal);

CString strValue = (char*)(_bstr_t)varVal;

读属性:

//节点属性,放在链表中

MSXML2::IXMLDOMNamedNodeMapPtr pAttrs = NULL;

MSXML2::IXMLDOMNodePtr pAttrItem;

childNode = (MSXML2::IXMLDOMElementPtr)(pXMLDoc-selectSingleNode("//NUM"));

childNode-get_attributes(pAttrs);

long nCount ;

pAttrs-get_length(nCount);

for(int i = 0 ; i nCount ; i++)

{

pAttrs-get_item(i,pAttrItem);

//我们可以通过函数get_nodeName,get_nodeTypedValue得到属性名和属性值

//也可以直接得到

CString strAttrName = (char*)(_bstr_t)pAttrItem-nodeName;

CString strAttrValue = (char*)(_bstr_t)pAttrItem-nodeTypedValue;

}

另外

可以用MSXML DOM

创建一个文档对象的过程。

HRESULT hr;

IXMLDomDocument* pXMLDoc;

IXMLDOMNode* pXDN;

Hr=CoInitialize(NULL); //COM的初始化

hr=CoCreateInstance(CLSID_DOM Document,NULL,CLSCTX_INPPROC_SERVER,

IID_IXMLDOMDocument,(void**) pXMLDoc);

hr=pXMLDoc-QueryInterface (IID_IXMLDOMNode,(void**)pXDN);

使用文档中的createElement方法来创建一个节点装载和保存XML文件。通过load或者是loadXML方法可以从一个指定的URL来装载一个XML文档Save方法是用来把文档保存到一个指定的位置,用getElementsByTagName获得制定节点数据

二、

// 创建对象

CoInitialize(NULL); // 初始化COM

// 创建解析器实例

CComPtrIXMLDOMDocument spXMLDOM;

BSTR bstrItemText;

// long value;

CString strbuf;

HRESULT hr=spXMLDOM.CoCreateInstance (_uuidof(DOMDocument));

spXMLDOM-put_async(VARIANT_FALSE);

spXMLDOM-put_validateOnParse(VARIANT_FALSE);

spXMLDOM-put_resolveExternals(VARIANT_FALSE);

spXMLDOM-put_preserveWhiteSpace(VARIANT_TRUE);

_bstr_t path = _bstr_t(xmlPath);

// 装载XML文档。

hr=spXMLDOM-load(path);

// 1、读取里面全部文本

spXMLDOM-get_text(bstrItemText); // new

strbuf = bstrItemText; // new

// 2、读取一个节点

_bstr_t bstrSS("paragraph");

CComPtrIXMLDOMNodeList spParagraphs;

spParagraphs=spXMLDOM-getElementsByTagName(bstrSS); //搜索"Paragrah"

//是否正确的得到了指向IDOMNodeList的指针。

hr = spParagraphs-get_length(value); //得到所包含的NODE节点的个数

if(SUCCEEDED(hr))

...{

spParagraphs-reset();

for(int ii=0; iivalue; ii++)

...{

CComPtrIXMLDOMNode spParagraph;

//得到具体的一个NODE节点

// hr = spParagraphs-get_item(ii,spParagraph);

spParagraph = spParagraphs-nextNode();

if(SUCCEEDED(hr))

...{

spParagraph-get_text(bstrItemText); //得到该节点相关的文本信息

strbuf += bstrItemText;

strbuf += " ";

}

}

}

C#怎样读取XML文件中的指定值

两种方式: 1、使用xmldocument类加载这个xml,然后调用其成员函数查找你要的节点。 2、在vs中打开这个xml文件,在xml菜单中选择生成架构,将这个xsd保存为文件a.xsd,然后进入vs的命令行,进入a.xsd目录,调用“xsd.exe /c /n:MyNamespace a.xs

C++ 读取XML的方法!

#include XMLDoc.hpp ——相关说明 _di_IXMLDocument 为模板类 typedef System::DelphiInterface IXMLDocument _di_IXMLDocument; _di_IXMLNode typedef System::DelphiInterface IXMLNode _di_IXMLNode; _di_IXMLNodeList 同 ——类方法 //设置参数 void TXXX::setOptions(String name,String value){ //创建文档对象 _di_IXMLDocument XMLDoc = LoadXMLDocument(L"文件路径"); XMLDoc-Active=true; //文档根节点 _di_IXMLNode root = XMLDoc-DocumentElement; //想要查找节点 _di_IXMLNode tempNode; //调用搜索方法 searchXml(name,root,tempNode); // 处理 if(tempNode!=NULL) tempNode-SetText(value); XMLDoc-SaveToFile(L"文件路径"); } //递归搜索参数节点树 void TXXX::searchXml(String name,_di_IXMLNode Parent_Node,_di_IXMLNode tempNode){ _di_IXMLNode Child_Node; //子结点 //子节点列表 _di_IXMLNodeList list = Parent_Node-ChildNodes; for(int i=0;ilist-Count;i++) { Child_Node = list-Get(i); //递归结束条件 if(Child_Node-GetNodeName()==name) { tempNode = Child_Node; break; } else { //递归函数 searchXml(name,Child_Node,tempNode); } } }


文章标题:xml文件c语言读取函数 c#读xml文件
转载来于:http://cdiso.cn/article/hpcois.html

其他资讯