xml_node* xml_node::next_child(void) { acl_assert(child_iter_); ACL_XML_NODE* node = node_->iter_next(child_iter_, node_); if (node == NULL) return NULL; xml_node* n = NEW xml_node(node, xml_); nodes_tmp_.push_back(n); return n; }
TiXmlNode* CEditInfo::xmlInsertNodeTextAfter(TiXmlNode* after_this, const string& node_name, const string& node_text) { TiXmlNode* node_exist = m_xml_doc.FirstChildElement(node_name); if ( node_exist ) return node_exist; TiXmlElement xml_node(node_name); TiXmlText xml_node_txt(node_text); xml_node.InsertEndChild(xml_node_txt); node_exist = m_xml_doc.InsertAfterChild(after_this, xml_node); return node_exist; }
xml_node* xml_node::first_child(void) { if (child_iter_ == NULL) child_iter_ = (ACL_ITER*) acl_mymalloc(sizeof(ACL_ITER)); ACL_XML_NODE* node = node_->iter_head(child_iter_, node_); if (node == NULL) return NULL; xml_node* n = NEW xml_node(node, xml_); nodes_tmp_.push_back(n); return n; }
xml_node& xml_node::get_parent() const { if (parent_) return *parent_; else if (node_->parent == node_->xml->root) return xml_->get_root(); else if (node_->parent == NULL) // xxx: can this happen? return xml_->get_root(); const_cast<xml_node*>(this)->parent_saved_ = NEW xml_node(node_->parent, xml_); const_cast<xml_node*>(this)->parent_ = parent_saved_; return *parent_saved_; }
const std::vector<xml_node*>& xml::getElementsByTagName(const char* tag) const { const_cast<xml*>(this)->clear(); ACL_ARRAY* a = acl_xml_getElementsByTagName(xml_, tag); if (a == NULL) return elements_; ACL_ITER iter; acl_foreach(iter, a) { ACL_XML_NODE *tmp = (ACL_XML_NODE*) iter.data; xml_node* node = NEW xml_node(tmp, const_cast<xml*>(this)); const_cast<xml*>(this)->elements_.push_back(node); }
xml_node* xml_node::first_child(void) { if (child_iter_ == NULL) child_iter_ = (ACL_ITER*) acl_mymalloc(sizeof(ACL_ITER)); ACL_XML_NODE* node = node_->iter_head(child_iter_, node_); if (node == NULL) return NULL; if (child_ == NULL) child_ = NEW xml_node(node, xml_); else child_->node_ = node; return child_; }
xml_node &xml_node::add_child(std::string const& name, unsigned line, bool text_node) { children_.push_back(xml_node(tree_, name, line, text_node)); return children_.back(); }
#include "common.hpp" #include "helpers.hpp" #include <limits.h> TEST_XML_FLAGS(dom_text_empty, "<node><a>foo</a><b><![CDATA[bar]]></b><c><?pi value?></c><d/></node>", parse_default | parse_pi) { xml_node node = doc.child(STR("node")); CHECK(node.child(STR("a")).text()); CHECK(node.child(STR("b")).text()); CHECK(!node.child(STR("c")).text()); CHECK(!node.child(STR("d")).text()); CHECK(!xml_node().text()); CHECK(!xml_text()); generic_empty_test(node.child(STR("a")).text()); } TEST_XML(dom_text_bool_ops, "<node>foo</node>") { generic_bool_ops_test(doc.child(STR("node")).text()); } TEST_XML_FLAGS(dom_text_get, "<node><a>foo</a><b><node/><![CDATA[bar]]></b><c><?pi value?></c><d/></node>", parse_default | parse_pi) { xml_node node = doc.child(STR("node")); CHECK_STRING(node.child(STR("a")).text().get(), STR("foo")); CHECK_STRING(node.child(STR("a")).first_child().text().get(), STR("foo"));
int _tmain(int argc, _TCHAR* argv[]) { tstring strUiresDir; //uires路径,相对于当前路径 tstring strSubDirs; //搜索的子目录列表,子目录之间使用“|”分开. tstring strImgDir; //图片目录,不要和子目录列表重复。imglist: file[3].png imgframe: file[3{2,2,2,2}].png bool bBackup=true; int c; _tprintf(_T("%s\n"),GetCommandLine()); while ((c = getopt(argc, argv, _T("p:s:i:b:c:"))) != EOF || optarg!=NULL) { switch (c) { case 'p':strUiresDir=optarg;break; case 's':strSubDirs=optarg;break; case 'i':strImgDir=optarg;break; case 'b': bBackup = _tcsicmp(optarg,_T("no"))==0?false:true; case 'c': g_bEnableColorize = _tcsicmp(optarg,_T("no"))==0?false:true; default: break; } } if(strUiresDir.empty() || strSubDirs.empty() || strImgDir.empty()) { printUsage(); return 1; } SetCurrentDirectory(strUiresDir.c_str()); xml_document docUiIdx; if(!docUiIdx.load_file("uires.idx")) { printf("load uires.idx failed."); return 2; } vector<tstring> vecSubDirs; int iStart = 0; while(iStart<strSubDirs.size()) { int iFind = strSubDirs.find(_T('|'),iStart); if(iFind == strSubDirs.npos) iFind = strSubDirs.size(); tstring strSubDir = strSubDirs.substr(iStart,iFind - iStart); vecSubDirs.push_back(strSubDir); iStart = iFind + 1; } xml_node xmlRes = docUiIdx.child(_T("resource")); for(int i=0;i<vecSubDirs.size();i++) { xml_node xmlType = xmlRes.child(vecSubDirs[i].c_str()); //make sure xmlType is an empty element if(xmlType) xmlRes.remove_child(xmlType); xmlType = xmlRes.append_child(vecSubDirs[i].c_str()); ImportResource(xmlType,vecSubDirs[i].c_str(),_T(""),xml_node()); } xml_node xmlImage = xmlRes.child(strImgDir.c_str()); if(xmlImage) xmlRes.remove_child(xmlImage); xmlImage = xmlRes.append_child(strImgDir.c_str()); xml_document docSkin; docSkin.load_file(L"values\\skin.xml"); xml_node xmlSkin = docSkin.child(_T("skin")); if(!xmlSkin) xmlSkin = docSkin.append_child(_T("skin")); ImportResource(xmlImage,strImgDir,_T(""),xmlSkin); if(bBackup) {//备份数据 ::CopyFile(_T("uires.idx"),_T("uires.bak.idx"),FALSE); ::CopyFile(_T("values\\skin.xml"),_T("values\\skin.bak.xml"),FALSE); } docUiIdx.save_file(L"uires.idx"); docSkin.save_file(L"values\\skin.xml"); return 0; }
xml_node root () { return xml_node(xmlDocGetRootElement(xmldoc_holder.get())); }