2008-11-19 14 views
10

मुझे मौजूदा xml फ़ाइल लेने की आवश्यकता है, और केवल कुछ विशेषताओं को संशोधित करने और फ़ाइल को वापस लिखने की आवश्यकता है।मौजूदा xml फ़ाइल को संशोधित करने के लिए libxml2 का उपयोग कैसे करें?

मैं यह करने के लिए libxml2 का उपयोग करने के बारे में सोच रहा था। आवेदन लिनक्स पर चल रहा सी/सी ++ है।

बात यह है कि, libxml2 में पोर्टेबल वाशरूम, शावर, और एक ही नलसाजी के माध्यम से जुड़े कई अन्य चीजों के साथ रसोई सिंक के कई बदलाव शामिल हैं। विभिन्न पार्सर्स उपलब्ध हैं, और चीजों को करने के विभिन्न तरीके हैं। किसी ऐसे व्यक्ति के लिए जिसने पहले libxml2 का उपयोग नहीं किया है, यह थोड़ा डरावना है।

मुझे किस उदाहरण को देखना चाहिए, ताकि अंत में, मेरा आउटपुट .xml मूल इनपुट फ़ाइल के समान है, साथ ही मेरे द्वारा किए गए परिवर्तनों के समान है? अब तक, मैं libxml2 के tree1.c, tree2.c, और reader1.c उदाहरणों के साथ खेल रहा हूं, लेकिन केवल इन आउटपुट xml के साथ कहीं भी नहीं होगा।

xmlNodePtr pNode = xmlNewNode(0, (xmlChar*)"newNodeName"); 
xmlNodeSetContent(pNode, (xmlChar*)"content"); 
xmlAddChild(pParentNode, pNode); 
xmlDocSetRootElement(pDoc, pParentNode); 

और यहाँ चीजों का चयन करने के xpath का उपयोग करने का एक त्वरित उदाहरण है::

+2

ब्रायन Bondy के महान जबाब के अलावा , मैंने बाद में libxml2 के साथ "कैसे प्रारंभ करें" पर एक छोटा लेख लिखा है: http://charette.no-ip.com:81/programming/2010-01-03_LibXml2/ –

उत्तर

21
#include <libxml/xmlmemory.h> 
#include <libxml/parser.h> 
#include <libxml/xpath.h> 

//Load in the xml file from disk 
xmlDocPtr pDoc = xmlParseFile("file.xml"); 
//Or from a string xmlDocPtr pDoc = xmlNewDoc("<root><element/></root>"); 

//Do something with the document 
//.... 

//Save the document back out to disk. 
xmlSaveFileEnc("file.xml", pDoc, "UTF-8"); 

मुख्य बातों आप चाहते हैं शायद इन कार्यों हैं

//Select all the user nodes 
xmlChar *pExpression((xmlChar*)_T("https://stackoverflow.com/users/user")); 
xmlXPathObjectPtr pResultingXPathObject(getnodeset(pDoc, pExpression)); 
if (pResultingXPathObject) 
{ 
    xmlNodeSetPtr pNodeSet(pResultingXPathObject->nodesetval); 
    for(int i = 0; i < pNodeSet->nodeNr; ++i) 
    { 
     xmlNodePtr pUserNode(pNodeSet->nodeTab[i]); 
        //do something with the node 
    } 
} 
xmlXPathFreeObject(pResultingXPathObject); 
+0

मेरी इच्छा है कि मैंने इसे जल्द ही देखा होगा ! – Yos

+0

आप टाइप टाइप = वैल्यू के बजाय 'टाइप वार (वैल्यू)' का उपयोग क्यों कर रहे हैं? –

संबंधित मुद्दे