#include "OPXml.h"
#include <QtNetwork/QNetworkInterface>
#include <QtCore/QDateTime>
//#include "DmEmDataCache/Host/HostDataCache.h"
OPXml::OPXml() {
m_bIsValid = false;
}
OPXml::~OPXml()
{
}
OPXml::OPXml(QString &qstrFilePath) {
FromFilePath(qstrFilePath);
}
OPXml::OPXml(QFile *pQFile) {
FromFile(pQFile);
}
OPXml::OPXml(char *pszXml) {
FromString(pszXml);
}
bool OPXml::IsValid() {
return m_bIsValid;
}
bool OPXml::FromFilePath(QString &qstrFilePath) {
m_bIsValid = false;
m_file.setFileName(qstrFilePath);
if (!m_file.open(QIODevice::ReadOnly)) {
return m_bIsValid;
}
if (!m_doc.setContent(&m_file)) {
m_file.close();
return m_bIsValid;
}
m_bIsValid = true;
m_file.close();
return m_bIsValid;
}
bool OPXml::FromFile(QFile *pQFile) {
m_bIsValid = false;
if (!m_doc.setContent(pQFile)) {
return m_bIsValid;
}
m_bIsValid = true;
return m_bIsValid;
}
bool OPXml::FromString(char *pszXml) {
m_bIsValid = false;
QString str(pszXml);
if (!m_doc.setContent(str)) {
return m_bIsValid;
}
m_bIsValid = true;
return m_bIsValid;
}
bool OPXml::FindNode(QString &qstrNodeName) {
m_docElem = m_doc.documentElement();
m_node = m_docElem.firstChild();
while (!m_node.isNull()) {
m_elem = m_node.toElement(); // try to convert the node to an element.
qDebug() << qPrintable(m_elem.nodeName());
if (m_elem.nodeName() == qstrNodeName) {
break;
}
if (m_node.hasChildNodes()) {
m_node = m_node.firstChild();
} else {
while (m_node.nextSibling().isNull()) {
m_node = m_node.parentNode();
if (m_node.isNull()) {
break;
}
}
if (!m_node.isNull()) {
m_node = m_node.nextSibling();
}
}
}
m_elem = m_node.toElement();
if (m_elem.isNull()) {
return false;
} else {
return true;
}
}
/*
bool OPXml::FindNode(QString &qstrNodeName) {
m_docElem = m_doc.documentElement();
m_node = m_docElem.firstChild();
while (!m_node.isNull()) {
m_elem = m_node.toElement(); // try to convert the node to an element.
qDebug() << qPrintable(m_elem.nodeName());
if (m_elem.nodeName() == qstrNodeName) {
break;
}
if (m_node.hasChildNodes()) {
m_node = m_node.firstChild();
} else {
if (m_node.nextSibling().isNull()) {
m_node = m_node.parentNode();
}
m_node = m_node.nextSibling();
if (m_node.isNull()) {
m_node = m_node.parentNode();
}
}
}
m_elem = m_node.toElement();
if (m_elem.isNull()) {
return false;
} else {
return true;
}
}
*/
QString OPXml::GetNode(QString &qstrNodeName) {
QString str = "";
if (FindNode(qstrNodeName)) {
str = m_elem.text();
}
return str;
}
QString OPXml::GetNode(char *pszNodeName) {
QString strNodeName;
QString str;
strNodeName = pszNodeName;
if (FindNode(strNodeName)) {
str = m_elem.text();
}
return str;
}
QString OPXml::GetNodeTree(QString &qstrNodeName) {
QString str;
QDomDocument doc;
QTextStream Out(&str);
if (FindNode(qstrNodeName)) {
doc = m_elem.toDocument();
} else {
return str;
}
if (doc.isNull()) {
return str;
} else {
doc.save(Out, 4);
}
return str;
}
bool OPXml::AddNode(QString &qstrNodeName, QString &qstrNodeText) {
QDomElement e;
QDomText text;
if (m_doc.isNull()) {
m_doc.setContent(QString("<xml></xml>"));
}
e = m_doc.createElement(qstrNodeName);
if (e.isNull()) {
return false;
}
if (qstrNodeName.size()) {
text = m_doc.createTextNode(qstrNodeText);
if (text.isNull()) {
return false;
}
e.appendChild(text);
}
m_docElem = m_doc.documentElement();
m_docElem.appendChild(e);
m_bIsValid = true;
return true;
}
bool OPXml::AddNode(char *pszNodeName, char *pszNodeText) {
QString strNodeName(pszNodeName);
QString strNodeText(pszNodeText);
return AddNode(strNodeName, strNodeText);
}
bool OPXml::AddNode(QDomElement &elem) {
m_docElem.appendChild(elem);
return true;
}
bool OPXml::InsertNode(QString &qstrNodeName, QString &qstrSubNodeName, QString &qstrNodeText) {
QDomElement e;
QDomText text;
if (!FindNode(qstrNodeName)) {
return false;
}
e = m_doc.createElement(qstrSubNodeName);
if (e.isNull()) {
return false;
}
text = m_doc.createTextNode(qstrNodeText);
if (text.isNull()) {
return false;
}
e.appendChild(text);
m_elem.appendChild(e);
m_bIsValid = true;
return true;
}
bool OPXml::InsertNode(QString &qstrNodeName, QString &qstrSubNodeName, QDomElement &elem) {
QDomElement e;
QDomText text;
if (!FindNode(qstrNodeName)) {
return false;
}
e = m_doc.createElement(qstrSubNodeName);
if (e.isNull()) {
return false;
}
e.appendChild(elem);
m_elem.appendChild(e);
m_bIsValid = true;
return true;
}
bool OPXml::InsertNode(QString &qstrNodeName, QDomElement &elem) {
QDomElement e;
QDomText text;
QDomNode node;
if (!FindNode(qstrNodeName)) {
return false;
}
node = m_docElem.appendChild(elem);
m_elem.appendChild(node.toElement());
m_bIsValid = true;
return true;
}
bool OPXml::AddFlowID() {
QString strDayToDayAccount;
strDayToDayAccount = QDateTime::currentDateTime().toString("yyyymmddHHMMss");
return AddNode(QString("FlowID"), strDayToDayAccount);
}
bool OPXml::AddMACAddress() {
QString strMacAddress;
static QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();
strMacAddress = nets.at(0).hardwareAddress();
strMacAddress.replace(QString(":"), QString(""));
return AddNode(QString("MacAddress"), strMacAddress);
}
bool OPXml::AddAccessID() {
QString strAccessID;
// strAccessID = HostDataCache::GetInstance()->MachineSN;
return AddNode(QString("AccessID"), strAccessID);
}
QString OPXml::ToString() {
QString str = "";
QTextStream Out(&str);
if (m_bIsValid) {
m_doc.save(Out, 4);
}
return str;
}
QString OPXml::GetFlowID() {
return GetNode(QString("FlowID"));
}
QString OPXml::GetMACAddress() {
return GetNode(QString("MacAddress"));
}
QString OPXml::GetAccessID() {
return GetNode(QString("AccessID"));
}
QString OPXml::GetMsgType() {
return GetNode(QString("MsgType"));
}
bool OPXml::SaveToFile(QString qstrFilePath) {
QFile f(qstrFilePath);
if (!f.open(QFile::WriteOnly | QFile::Text))
return false;
QTextStream out(&f);
m_doc.save(out, 4);
f.close();
return true;
}
QDomElement &OPXml::FindNodeTree(QString &qstrNodeName) {
if(!FindNode(qstrNodeName)) {
m_elem.clear();
}
m_tmpElem = m_elem;
return m_tmpElem;
}