本文整理汇总了C++中appsecinc::xml::XmlDocument类的典型用法代码示例。如果您正苦于以下问题:C++ XmlDocument类的具体用法?C++ XmlDocument怎么用?C++ XmlDocument使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了XmlDocument类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: testSelectNodes
void XmlDocumentUnitTests::testSelectNodes()
{
struct testSelectNodes_TestData
{
LPCWSTR xpath;
long count;
};
testSelectNodes_TestData testdata[] =
{
{ L"/bookstore", 1 },
{ L"/bookstore/book", 2 }
};
std::wstring xmlfile = GetLocalFileLocation(L"store.xml");
std::wcout << std::endl << L"Xml: " << xmlfile;
AppSecInc::Xml::XmlDocument xml;
xml.Load(xmlfile, CLSID_DOMDocument);
for (int i = 0; i < ARRAYSIZE(testdata); i++)
{
MSXML2::IXMLDOMNodeListPtr nodes = xml.SelectNodes(testdata[i].xpath);
std::wcout << std::endl << testdata[i].xpath << L": " << nodes->length;
CPPUNIT_ASSERT(testdata[i].count == nodes->length);
}
}
开发者ID:MariusCC,项目名称:msiext,代码行数:26,代码来源:XmlDocumentUnitTests.cpp
示例2: testImport
void MsiDatabaseUnitTests::testImport()
{
std::wstring filename = AppSecInc::File::GetTemporaryFileNameW();
std::wcout << std::endl << L"Creating " << filename;
MsiDatabase database;
database.Create(filename);
std::wcout << std::endl << L"Database handle " << std::hex << (MSIHANDLE) database;
std::wstring path = File::GetModuleDirectoryW() + L"\\TestData_MsiUnitTests";
database.Import(path, L"Property.idt");
database.Import(path, L"ComboBox.idt");
database.Commit();
database.Close();
MsiPackage package(filename);
MsiInstall install(package);
AppSecInc::Xml::XmlDocument xmlDoc;
xmlDoc.LoadXml(install.GetViewData(L"SELECT * FROM `ComboBox`"));
std::wstring value = xmlDoc.GetNodeValue(L"/Table/Row/Data[@Column=\"Property\"]");
std::wcout << std::endl << L"Data: " << value;
CPPUNIT_ASSERT(value == L"DATABASE_SERVER");
package.Close();
AppSecInc::File::FileDelete(filename);
}
开发者ID:MariusCC,项目名称:msiext,代码行数:26,代码来源:MsiDatabaseUnitTests.cpp
示例3: testExecute
void MsiDatabaseUnitTests::testExecute()
{
std::wstring filename = AppSecInc::File::GetTemporaryFileNameW();
std::wcout << std::endl << L"Creating " << filename;
MsiDatabase database;
database.Create(filename);
std::wcout << std::endl << L"Database handle " << std::hex << (MSIHANDLE) database;
std::wstring path = File::GetModuleDirectoryW() + L"\\TestData_MsiUnitTests";
database.Execute(L"CREATE TABLE `Property` (`Property` CHAR(72) NOT NULL, `Value` CHAR(0) NOT NULL LOCALIZABLE PRIMARY KEY `Property`)");
database.Execute(L"INSERT INTO `Property` (`Property`, `Value`) VALUES ('ProductCode', '{72B62622-57A8-46ac-A12A-7669772D35DA}')");
database.Commit();
database.Close();
MsiPackage package(filename);
MsiInstall install(package);
AppSecInc::Xml::XmlDocument xmlDoc;
xmlDoc.LoadXml(install.GetViewData(L"SELECT `Value` FROM `Property` WHERE `Property`='ProductCode'"));
std::wstring value = xmlDoc.GetNodeValue(L"/Table/Row/Data[@Column=\"Value\"]");
std::wcout << std::endl << L"Data: " << value;
CPPUNIT_ASSERT(value == L"{72B62622-57A8-46ac-A12A-7669772D35DA}");
package.Close();
AppSecInc::File::FileDelete(filename);
}
开发者ID:MariusCC,项目名称:msiext,代码行数:26,代码来源:MsiDatabaseUnitTests.cpp
示例4: Save
MSXML2::IXMLDOMNodePtr AccessDatabase::Save(AppSecInc::Xml::XmlDocument& xmldoc, MSXML2::IXMLDOMNodePtr parent) const
{
MSXML2::IXMLDOMNodePtr root = xmldoc.AppendChild(L"AccessDatabase", parent);
xmldoc.AppendChild(L"DBQ", root)->text = _bstr_t(_dbq.c_str());
xmldoc.AppendChild(L"ConnectionString", root)->text = _bstr_t(AppSecInc::Crypt::DPAPIImpl::Protect(_connection_string).c_str());
return root;
}
开发者ID:MariusCC,项目名称:msiext,代码行数:7,代码来源:AccessDatabase.cpp
示例5: testGetNodeValue
void XmlDocumentUnitTests::testGetNodeValue()
{
struct testGetNodeValue_TestData
{
LPCWSTR xpath;
LPCWSTR result;
LPCWSTR xml;
};
std::wstring xmlfile = GetLocalFileLocation(L"store.xml");
std::wcout << std::endl << L"Xml: " << xmlfile;
AppSecInc::Xml::XmlDocument xml;
xml.Load(xmlfile, CLSID_DOMDocument);
testGetNodeValue_TestData testdata[] =
{
{ L"/bookstore/book[@id=1]/title", L"'Emma'", L"<title xmlns=\"http://www.lucernepublishing.com\">'Emma'</title>" }
};
for (int i = 0; i < ARRAYSIZE(testdata); i++)
{
// default value
std::wstring default_value = xml.GetNodeValue(L"/invalid/xpath", NULL, L"default");
std::wcout << std::endl << L"Value: " << default_value;
CPPUNIT_ASSERT(L"default" == default_value);
// value
std::wstring result_value = xml.GetNodeValue(testdata[i].xpath);
std::wcout << std::endl << L"Value: " << result_value;
CPPUNIT_ASSERT(testdata[i].result == result_value);
// xml
std::wstring result_xml = xml.GetNodeXml(testdata[i].xpath);
std::wcout << std::endl << L"Xml: " << result_xml;
CPPUNIT_ASSERT(testdata[i].xml == result_xml);
}
}
开发者ID:MariusCC,项目名称:msiext,代码行数:35,代码来源:XmlDocumentUnitTests.cpp
示例6: msiInstall
CA_API UINT __stdcall Xml_DeleteNodes(MSIHANDLE hInstall)
{
MSI_EXCEPTION_HANDLER_PROLOG;
MsiInstall msiInstall(hInstall);
std::wstring filename = msiInstall.GetProperty(L"XML_FILENAME");
AppSecInc::Xml::XmlDocument doc;
doc.Load(filename);
std::wstring xpath = msiInstall.GetProperty(L"XML_XPATH");
MSXML2::IXMLDOMNodeListPtr nodes = doc.FindNodes(xpath);
int count = 0;
if (NULL != nodes)
{
MSXML2::IXMLDOMNodePtr node = NULL;
while (NULL != (node = nodes->nextNode()))
{
node->parentNode->removeChild(node);
count++;
}
}
if (count > 0)
{
CHECK_HR(doc->save(CComVariant(filename.c_str())),
L"Error saving '" << filename << L"'");
}
msiInstall.SetProperty(L"XML_DELETED", AppSecInc::StringUtils::toWString(count));
MSI_EXCEPTION_HANDLER_EPILOG;
return ERROR_SUCCESS;
}
开发者ID:stephenwelsh,项目名称:msiext,代码行数:32,代码来源:XmlToolsImpl.cpp
示例7: testGetAttributeValueXPath
void XmlDocumentUnitTests::testGetAttributeValueXPath()
{
struct testGetAttributeValue_TestData
{
LPCWSTR xpath;
LPCWSTR name;
LPCWSTR result;
};
std::wstring xmlfile = GetLocalFileLocation(L"store.xml");
std::wcout << std::endl << L"Xml: " << xmlfile;
AppSecInc::Xml::XmlDocument xml;
xml.Load(xmlfile, CLSID_DOMDocument);
testGetAttributeValue_TestData testdata[] =
{
{ L"/bookstore/book[@id=1]", L"id", L"1" }
};
for (int i = 0; i < ARRAYSIZE(testdata); i++)
{
MSXML2::IXMLDOMNodePtr node = xml.SelectNode(testdata[i].xpath);
// default value
std::wstring default_value = xml.GetAttributeValue(L"invalid", node, L"default");
std::wcout << std::endl << L"Value: " << default_value;
CPPUNIT_ASSERT(L"default" == default_value);
// value
std::wstring result_value = xml.GetAttributeValue(testdata[i].name, node);
std::wcout << std::endl << L"Value: " << result_value;
CPPUNIT_ASSERT(testdata[i].result == result_value);
}
}
开发者ID:MariusCC,项目名称:msiext,代码行数:32,代码来源:XmlDocumentUnitTests.cpp
示例8: testGetNodeBoolValue
void XmlDocumentUnitTests::testGetNodeBoolValue()
{
struct testGetNodeBoolValue_TestData
{
LPCWSTR xpath;
bool result;
};
std::wstring xmlfile = GetLocalFileLocation(L"store.xml");
std::wcout << std::endl << L"Xml: " << xmlfile.c_str();
AppSecInc::Xml::XmlDocument xml;
xml.Load(xmlfile, CLSID_DOMDocument);
testGetNodeBoolValue_TestData testdata[] =
{
{ L"/bookstore/book[@id=1]/read", false },
{ L"/bookstore/book[@id=2]/read", true },
};
for (int i = 0; i < ARRAYSIZE(testdata); i++)
{
// value
bool result_value = xml.GetNodeBoolValue(testdata[i].xpath);
std::wcout << std::endl << L"Value: " << result_value;
CPPUNIT_ASSERT(testdata[i].result == result_value);
}
}
开发者ID:MariusCC,项目名称:msiext,代码行数:27,代码来源:XmlDocumentUnitTests.cpp
示例9: testHasNode
void XmlDocumentUnitTests::testHasNode()
{
std::wstring xmlfile = GetLocalFileLocation(L"store.xml");
AppSecInc::Xml::XmlDocument xml;
xml.Load(xmlfile, CLSID_DOMDocument);
CPPUNIT_ASSERT(xml.HasNode(L"/bookstore/book[@id=1]/title"));
CPPUNIT_ASSERT(! xml.HasNode(L"/bookstore/book[@id=1]/invalid"));
}
开发者ID:MariusCC,项目名称:msiext,代码行数:8,代码来源:XmlDocumentUnitTests.cpp
示例10: testFindNodes
void XmlDocumentUnitTests::testFindNodes()
{
std::wstring xmlfile = GetLocalFileLocation(L"store.xml");
AppSecInc::Xml::XmlDocument xml;
xml.Load(xmlfile, CLSID_DOMDocument);
CPPUNIT_ASSERT(NULL != xml.FindNodes(L"/bookstore/book[@id=1]"));
CPPUNIT_ASSERT(NULL == xml.FindNodes(L"/bookstore/book[@id=1]/invalid/"));
}
开发者ID:MariusCC,项目名称:msiext,代码行数:8,代码来源:XmlDocumentUnitTests.cpp
示例11: testGetNodeXml
void XmlDocumentUnitTests::testGetNodeXml()
{
std::wstring xmlfile = GetLocalFileLocation(L"store.xml");
AppSecInc::Xml::XmlDocument xml;
xml.Load(xmlfile, CLSID_DOMDocument);
std::wstring data = xml.GetNodeXml(L"/bookstore/book[@id=1]");
CPPUNIT_ASSERT(AppSecInc::StringUtils::startsWith(data, L"<book"));
}
开发者ID:MariusCC,项目名称:msiext,代码行数:8,代码来源:XmlDocumentUnitTests.cpp
示例12: testCreate
void XmlDocumentUnitTests::testCreate()
{
AppSecInc::Xml::XmlDocument xml;
xml.LoadXml(L"<xml />");
CPPUNIT_ASSERT(! xml.GetXml().empty());
xml.Create();
CPPUNIT_ASSERT(xml.GetXml().empty());
}
开发者ID:MariusCC,项目名称:msiext,代码行数:8,代码来源:XmlDocumentUnitTests.cpp
示例13: testLoad
void XmlDocumentUnitTests::testLoad()
{
std::wstring xmlfile = GetLocalFileLocation(L"store.xml");
std::wcout << std::endl << L"Xml: " << xmlfile.c_str();
AppSecInc::Xml::XmlDocument xml;
xml.Load(xmlfile, CLSID_DOMDocument);
CPPUNIT_ASSERT(AppSecInc::StringUtils::startsWith(xml.GetXml(),
L"<bookstore xmlns=\"http://www.lucernepublishing.com\">"));
}
开发者ID:MariusCC,项目名称:msiext,代码行数:9,代码来源:XmlDocumentUnitTests.cpp
示例14: Test_CreateDatabases_Access
void CreateDatabasesUnitTests::Test_CreateDatabases_Access()
{
AppSecInc::Msi::MsiShim hInstall;
std::wstring testdatapath = AppSecInc::File::GetModuleDirectoryW() + L"\\TestData_DataSourceUnitTests";
for each(const std::wstring& idtfile in AppSecInc::File::GetFiles(testdatapath, L"*.idt"))
{
std::wstring idtfile_name = AppSecInc::File::GetFileNameW(idtfile);
std::wcout << std::endl << L" Importing \"" << idtfile_name << L"\"";
hInstall.Import(testdatapath, idtfile_name);
}
AppSecInc::Msi::MsiInstall msiInstall(hInstall);
std::wstring dbq = AppSecInc::File::DirectoryCombine(
AppSecInc::File::GetTemporaryDirectoryW(),
AppSecInc::Com::GenerateGUIDStringW() + L".dbq");
std::wcout << std::endl << L"DBQ: " << dbq;
msiInstall.SetProperty(L"ACCESS_DATABASE_DBQ", dbq);
msiInstall.SetProperty(L"INSTALLLOCATION", AppSecInc::File::GetSpecialFolderPath(CSIDL_COMMON_APPDATA) + L"\\");
AppSecInc::Xml::XmlDocument xml;
CPPUNIT_ASSERT(ERROR_SUCCESS == hInstall.ExecuteCA(L"DataSource.dll", L"CreateDatabases_Access_Immediate"));
xml.LoadXml(msiInstall.GetProperty(L"CreateDatabases_Access_Deferred_Install"));
// two databases, both have create actions, one is checkIfExists
CPPUNIT_ASSERT(1 == xml.SelectNodes(L"/AccessDatabases/AccessDatabase")->length);
CPPUNIT_ASSERT(1 == xml.SelectNodes(L"/AccessDatabases/AccessDatabase[@actions='create']")->length);
CPPUNIT_ASSERT(1 == xml.SelectNodes(L"/AccessDatabases/AccessDatabase[@checkIfExists='false']")->length);
CPPUNIT_ASSERT(0 == xml.SelectNodes(L"/AccessDatabases/AccessDatabase[@checkIfExists='true']")->length);
// connection strings must be encrypted
MSXML2::IXMLDOMNodeListPtr connectionStrings = xml.SelectNodes(L"/AccessDatabases/AccessDatabase/ConnectionString/text()");
for (int i = 0; i < connectionStrings->length; i++)
{
std::wstring encrypted = StringUtils::mb2wc(StringUtils::bstr2mb(connectionStrings->item[i]->text));
AppSecInc::Crypt::DPAPIImpl::UnProtect(encrypted); // Fails if input string is not encrypted
}
// create the databases
msiInstall.SetProperty(L"CustomActionData", msiInstall.GetProperty(L"CreateDatabases_Access_Deferred_Install"));
CPPUNIT_ASSERT(ERROR_SUCCESS == hInstall.ExecuteCA(L"DataSource.dll", L"CreateDatabases_Access_Deferred"));
// check that the database exists
AppSecInc::Databases::Access::AccessDatabase database;
database.SetDBQ(dbq);
CPPUNIT_ASSERT(database.Exists());
// drop the created databases
MSXML2::IXMLDOMNodePtr Accessdatabase_node;
MSXML2::IXMLDOMNodeListPtr Accessdatabase_nodes = xml.SelectNodes(L"/AccessDatabases/AccessDatabase");
while(NULL != (Accessdatabase_node = Accessdatabase_nodes->nextNode()))
xml.SetAttribute(L"actions", L"drop", Accessdatabase_node);
msiInstall.SetProperty(L"CustomActionData", xml.GetXml());
CPPUNIT_ASSERT(ERROR_SUCCESS == hInstall.ExecuteCA(L"DataSource.dll", L"CreateDatabases_Access_Deferred"));
}
开发者ID:MariusCC,项目名称:msiext,代码行数:57,代码来源:CreateDatabasesUnitTests.cpp
示例15: msiInstall
CA_API UINT __stdcall TemplateFiles_Deferred(MSIHANDLE hInstall)
{
MSI_EXCEPTION_HANDLER_PROLOG;
MsiInstall msiInstall(hInstall);
AppSecInc::Xml::XmlDocument xmlDocument;
xmlDocument.LoadXml(msiInstall.GetActionData());
MSXML2::IXMLDOMNodeListPtr rows = xmlDocument.SelectNodes(L"//TemplateFile[@execute='true']"); // \todo //Row[@rollback='false']
MSXML2::IXMLDOMNodePtr row = NULL;
while (NULL != (row = rows->nextNode()))
{
std::wstring id = xmlDocument.GetAttributeValue(L"id", row);
std::wstring source = xmlDocument.GetNodeValue(L"Source", row);
std::wstring target = xmlDocument.GetNodeValue(L"Target", row, source);
msiInstall.LogInfo(L"TemplateFiles_Deferred", source + L" => " + target);
std::map<std::wstring, std::wstring> properties;
{
MSXML2::IXMLDOMNodeListPtr property_rows = xmlDocument.SelectNodes(L"Properties/Property", row);
MSXML2::IXMLDOMNodePtr property_row = NULL;
while (NULL != (property_row = property_rows->nextNode()))
{
std::wstring name = xmlDocument.GetAttributeValue(L"name", property_row);
std::wstring value = xmlDocument.GetAttributeValue(L"value", property_row);
long escape = AppSecInc::StringUtils::stringToLong(xmlDocument.GetAttributeValue(L"escape", property_row, L"0"));
properties[name] = escape == 1 ? AppSecInc::StringUtils::escape(value) : value;
}
}
std::wstring data;
bool utf8 = AppSecInc::File::ReadAndConvertToEnd(source, data);
data = AppSecInc::Formatter::FormatTemplate(data, properties);
std::string char_data;
if (utf8)
{
char_data = AppSecInc::StringUtils::wc2utf8(data);
char_data.insert(0, std::string(reinterpret_cast<char *>(AppSecInc::File::utf8_bom)));
}
else
{
char_data = AppSecInc::StringUtils::wc2mb(data);
}
std::vector<char> binary_data;
binary_data.assign(char_data.begin(), char_data.end());
AppSecInc::File::FileWrite(target, binary_data);
}
MSI_EXCEPTION_HANDLER_EPILOG;
return ERROR_SUCCESS;
}
开发者ID:wojwal,项目名称:msiext,代码行数:56,代码来源:TemplateFiles.cpp
示例16: testGetXml
void XmlDocumentUnitTests::testGetXml()
{
std::wstring xmlfile = GetLocalFileLocation(L"store.xml");
std::wcout << std::endl << L"Xml: " << xmlfile;
AppSecInc::Xml::XmlDocument xml;
xml.Load(xmlfile);
std::wstring outerxml = xml.GetXml();
CPPUNIT_ASSERT(! outerxml.empty());
//! \todo read the file with File::ReadToEnd (implement) and compare data
}
开发者ID:MariusCC,项目名称:msiext,代码行数:10,代码来源:XmlDocumentUnitTests.cpp
示例17: testGetAttributeValue
void XmlDocumentUnitTests::testGetAttributeValue()
{
std::wstring xmlfile = GetLocalFileLocation(L"store.xml");
std::wcout << std::endl << L"Xml: " << xmlfile;
AppSecInc::Xml::XmlDocument xml;
xml.Load(xmlfile);
std::wstring result = xml.GetAttributeValue(L"/bookstore/book", L"id");
std::wcout << std::endl << L"Value: " << result;
CPPUNIT_ASSERT(result == L"1");
}
开发者ID:MariusCC,项目名称:msiext,代码行数:10,代码来源:XmlDocumentUnitTests.cpp
示例18: msiInstall
CA_API UINT __stdcall LocalGroupMembers_Deferred(MSIHANDLE hInstall)
{
MSI_EXCEPTION_HANDLER_PROLOG;
MsiInstall msiInstall(hInstall);
AppSecInc::Xml::XmlDocument xmlDocument;
xmlDocument.LoadXml(msiInstall.GetActionData());
MSXML2::IXMLDOMNodeListPtr rows = xmlDocument.SelectNodes(L"/LocalGroupMembers/LocalGroupMember");
MSXML2::IXMLDOMNodePtr row = NULL;
while (NULL != (row = rows->nextNode()))
{
std::wstring id = xmlDocument.GetAttributeValue(L"id", row);
std::wstring username = xmlDocument.GetNodeValue(L"Username", row);
std::wstring groupname = xmlDocument.GetNodeValue(L"Group", row, L"");
bool add_member = xmlDocument.GetAttributeBoolValue(L"add", row);
bool remove_member = xmlDocument.GetAttributeBoolValue(L"remove", row);
bool check = xmlDocument.GetAttributeBoolValue(L"check", row);
if (remove_member && (! check || AppSecInc::LSA::LocalGroup::IsMember(groupname, username)))
{
msiInstall.LogInfo(_T(__FUNCTION__), L"Removing \"" + username + L"\" from \"" + groupname + L"\"");
AppSecInc::LSA::LocalGroup::DeleteMember(groupname, username);
}
if (add_member && (! check || ! AppSecInc::LSA::LocalGroup::IsMember(groupname, username)))
{
msiInstall.LogInfo(_T(__FUNCTION__), L"Adding \"" + username + L"\" to \"" + groupname + L"\"");
AppSecInc::LSA::LocalGroup::AddMember(groupname, username);
}
}
MSI_EXCEPTION_HANDLER_EPILOG;
return ERROR_SUCCESS;
}
开发者ID:MariusCC,项目名称:msiext,代码行数:35,代码来源:LocalGroupMembers.cpp
示例19: testSelectNode
void XmlDocumentUnitTests::testSelectNode()
{
std::wstring xmlfile = GetLocalFileLocation(L"store.xml");
AppSecInc::Xml::XmlDocument xml;
xml.Load(xmlfile, CLSID_DOMDocument);
CPPUNIT_ASSERT(xml.SelectNode(L"/bookstore/book[@id=1]/title") != NULL);
try
{
xml.SelectNode(L"/bookstore/book[@id=1]/invalid");
throw "expected std::exception";
}
catch(std::exception& e)
{
std::cout << std::endl << "Expected exception: " << e.what();
}
}
开发者ID:MariusCC,项目名称:msiext,代码行数:16,代码来源:XmlDocumentUnitTests.cpp
示例20: testLoadSave
void AccessDatabaseUnitTests::testLoadSave()
{
AccessDatabase database1;
database1.SetDBQ(L"test");
AppSecInc::Xml::XmlDocument doc;
doc.Create();
MSXML2::IXMLDOMNodePtr root = doc.AppendChild(L"Databases");
MSXML2::IXMLDOMNodePtr database_root = database1.Save(doc, root);
std::wcout << std::endl << doc.GetXml();
AccessDatabase database2;
database2.Load(doc, database_root);
CPPUNIT_ASSERT(database2.GetDBQ() == database1.GetDBQ());
}
开发者ID:MariusCC,项目名称:msiext,代码行数:17,代码来源:AccessDatabaseUnitTests.cpp
注:本文中的appsecinc::xml::XmlDocument类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论