XMLlite
XMLlite是Windows作業系統提供的了一組服務,用戶可以使用C/C++語言和其它微軟的開發工具開發基於XML的本機應用程式。它支持XML 1.0、SAX、XSLT 1.0,並提供了包括XSD和XDR在內的XML Schema 語言、XMLHttpRequest、XPath等技術。
XMLlite是前向讀寫XML文件,不緩衝或者建立XML文件的結構。
XMLlite並不是COM組件,因此不能給VB.Net、VBScript等使用。XMLlite使用的COM技術有:
- XMLlite的接口使用IUnknown接口的方式來做生存期管理;
- 數據存儲使用了COM的IStream;
- 接口對象的管理使用ATL的CComPtr。
使用這些COM資源時應該注意用後調用Release函數或者CComPtr的RAII。
系統安裝
[編輯]從2006年10月開始,XMLlite運行時文件Xmllite.dll,包含在下述作業系統或軟體安裝中:[1]
- Windows Server 2008及更高版本
- Windows Vista及更高版本
- Windows XP with Service Pack 3及更高版本
- Windows Server 2003 with Service Pack 2及更高版本
- Microsoft Internet Explorer 7及更高版本
SAX
[編輯]XmlLite的類是映射到.NET Framework實現的:[2]
XmlLite | .NET Framework |
---|---|
IXmlReader interface | XmlReader class |
IXmlWriter interface | XmlWriter class |
XmlReaderProperty enum | XmlReaderSettings class |
XmlWriterProperty enum | XmlWriterSettings class |
CreateXmlReaderInputWithEncodingCodePage CreateXmlReaderInputWithEncodingName | |
XmlNodeType enum | XmlNodeType enum |
IXmlReader
[編輯]用於讀入、分析XML的接口。
CComPtr<IXmlReader> reader;
COM_VERIFY(::CreateXmlReader(__uuidof(IXmlReader),
reinterpret_cast<void**>(&reader),
0));
CComPtr<IStream> stream;
// Using OS API to create stream object here...
reader->SetInput(stream);
HRESULT result = S_OK;
XmlNodeType nodeType = XmlNodeType_None;
while (S_OK == (result = reader->Read(&nodeType)))
{
// 已从流中成功读取一个节点。节点的属性自动存储在内部集合中,因此可以使用MoveToAttributeByName方法按名称将读取器移动到特定的属性。
for (HRESULT result = reader->MoveToFirstAttribute();S_OK == result;result = reader->MoveToNextAttribute())
{
// 成功枚举当前节点的一个属性
}
}
//返回 S_FALSE 以指示已到达流的结尾处
IXmlResolver
[編輯]解析外部實體。編寫對IXmlResolver接口實現並用IXmlReader的SetProperty方法設置XmlReaderProperty_XmlResolver屬性,以指示讀取器使用自編的外部實體解析程序。
IXmlReaderInput
[編輯]創建XML讀取器輸入對象並指定文本編碼。可用兩個函數創建該對象:
- CreateXmlReaderInputWithEncodingCodePage
- CreateXmlReaderInputWithEncodingName
IXmlWriter
[編輯]CComPtr<IXmlWriter> writer;
COM_VERIFY(::CreateXmlWriter(__uuidof(IXmlWriter),
reinterpret_cast<void**>(&writer),
0));
CComPtr<IStream> stream;
// Use OS API to create stream object here
writer->SetOutput(stream);
writer->SetProperty(XmlWriterProperty_Indent, TRUE);//写入之前,可以修改写入器属性,如缩进 XML 输出。
//IXmlWriter提供了许多 WriteXXX 方法,用于写入各种节点类型、属性和值。
IXmlWriterLite
[編輯]IXmlWriterOutput
[編輯]用此對象指定輸出的XML的文本編碼不是UTF-8的其他設定。可用兩個函數創建本對象:
- CreateXmlWriterOutputWithEncodingCodePage
- CreateXmlWriterOutputWithEncodingName
C語言使用
[編輯]需要在源程序中加入這行:
#include <xmllite.h>
#pragma comment(lib,"xmllite.lib")
Visual Basic使用
[編輯]VBScript使用
[編輯]參考文獻
[編輯]- ^ ([//web.archive.org/web/20161220084118/https://msdn.microsoft.com/EN-US/library/ee388577(v=VS.85,d=hv.2).aspx 頁面存檔備份,存於網際網路檔案館) Installing XmlLite in MSDN]
- ^ Kenny Kerr : XmlLite-A Small And Fast XML Parser For Native C++, published in MSDN Magazine, April 2007.