This is my object class vector build as class doinfo, function printtoxml inherited from class doinfo,
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <msclr/marshal_cppstd.h>
#using <System.dll>
#using <System.Xml.dll>
#using <System.Data.dll>
void queryinxpath_();
class doinfo
{
public:
doinfo(const std::string &dono,const std::string &acno, \
const std::string &name,const std::string &stcd, \
const std::string &desc,const std::string &upri, \
const std::string &dqty,const std::string &namb)
:dono_(dono),acno_(acno),name_(name),stcd_(stcd), \
desc_(desc),upri_(upri),dqty_(dqty),namb_(namb)
{}
void printoxml();
const std::string dono_;
const std::string acno_;
const std::string name_;
const std::string stcd_;
const std::string desc_;
const std::string upri_;
const std::string dqty_;
const std::string namb_;
private:
};
void doinfo::printoxml()
{
std::ofstream fo;
fo.open("C:\\test-result.xml",std::ios::out);
fo << "<Do>\n";
fo << "\t<delivery>\n";
fo << "\t\t<dono>" << dono_ << "</dono>\n";
fo << "\t\t<custcode>" << acno_ << "</custcode>\n";
fo << "\t\t<custname>" << name_ << "</custname>\n";
fo << "\t\t<stockcode>" << stcd_ << "</stockcode>\n";
fo << "\t\t<stockdesc>" << desc_ << "</stockdesc>\n";
fo << "\t\t<unitprice>" << upri_ << "</unitprice>\n";
fo << "\t\t<qty>" << dqty_ << "</qty>\n";
fo << "\t\t<amount>" << namb_ << "</amount>\n";
fo << "\t</delivery>\n";
fo << "</Do>\n";
fo.close();
}
void queryinxpath_()
{
std::string dono;
std::string custcode;
std::string custname;
std::string stockcode;
std::string stockdesc;
std::string unitprice;
std::string qty;
std::string amount;
System::Xml::XPath::XPathDocument^ doc = gcnew System::Xml::XPath::XPathDocument("C:/test.xml");
System::Xml::XPath::XPathNavigator^ nav = doc->CreateNavigator();
System::Xml::XPath::XPathExpression^ expr = nav->Compile("descendant::delivery[amount > 100]");
System::Xml::XPath::XPathNodeIterator^ iterator=nav->Select(expr);
std::vector<doinfo> don;
while (iterator->MoveNext())
{
System::Xml::XPath::XPathNavigator^ nav_ = iterator->Current->Clone();
nav_->MoveToChild("dono","");
//msclr::interop::marshal_context context;
//dono = context.marshal_as<std::string>(nav_->Value);
dono = msclr::interop::marshal_as<std::string>(nav_->Value);
System::Console::WriteLine("Dono : {0}",msclr::interop::marshal_as<System::String^>(dono));
nav_->MoveToParent();
nav_->MoveToChild("custcode","");
custcode = msclr::interop::marshal_as<std::string>(nav_->Value);
System::Console::WriteLine("Customer Code : {0} ",nav_->Value);
nav_->MoveToParent();
nav_->MoveToChild("custname","");
custname = msclr::interop::marshal_as<std::string>(nav_->Value);
System::Console::WriteLine("Customer Name : {0} ",nav_->Value);
nav_->MoveToParent();
nav_->MoveToChild("stockcode","");
stockcode = msclr::interop::marshal_as<std::string>(nav_->Value);
System::Console::WriteLine("StockCode : {0} ",nav_->Value);
nav_->MoveToParent();
nav_->MoveToChild("stockdesc","");
stockdesc = msclr::interop::marshal_as<std::string>(nav_->Value);
System::Console::WriteLine("Stockdesc : {0} ",nav_->Value);
nav_->MoveToParent();
nav_->MoveToChild("unitprice","");
unitprice = msclr::interop::marshal_as<std::string>(nav_->Value);
System::Console::WriteLine("UnitPrice : {0} ",nav_->Value);
nav_->MoveToParent();
nav_->MoveToChild("qty","");
qty = msclr::interop::marshal_as<std::string>(nav_->Value);
System::Console::WriteLine("Quantity : {0} ",nav_->Value);
nav_->MoveToParent();
nav_->MoveToChild("amount","");
amount = msclr::interop::marshal_as<std::string>(nav_->Value);
System::Console::WriteLine("Amount : {0} ",nav_->Value);
System::Console::WriteLine("\n");
don.push_back(doinfo(dono,custcode,custname,stockcode,stockdesc,unitprice,qty,amount));
}
std::vector<doinfo>::iterator ite;
for (ite=don.begin();ite!=don.end();++ite)
{
ite->printoxml();
}
}
int _tmain(int argc, _TCHAR* argv[])
{
queryinxpath_();
return 0;
}
When I return to check result of "test-result.xml", it will show out it has only one bunch of delivery node existed. It suppose to have few bunch of delivery node exists but it just be able to capture last nodes the end of loop process.
<Do>
<delivery>
<dono>DM202423</dono>
<custcode>M15</custcode>
<custname>A Company</custname>
<stockcode>ZPPFERG</stockcode>
<stockdesc>PRECISCO ENVELOPE</stockdesc>
<unitprice>0.8200</unitprice>
<qty>200</qty>
<amount>164.00</amount>
</delivery>
</Do>
Anyone could help me to solve my problems by create out a array buffer at inside class doinfo, so I could capture every single string object in memory for further print out into xml file.