2010-11-18 179 views
2

我有下面的XML結構,這樣我可以加我的配置細節lastconnected元素:添加XML元素和屬性

<?xml version="1.0" encoding="utf-8" ?> 
<lastconnectedServers> 
</lastconnectedServers > 

現在我想要做像添加元素和attributes.For例子我一些XML操作要添加的元素上面XML:(elemet lastconnectedServers內):

<Server ip="" domain=""> 
     <SharedFolder name="" type=""/> 
     <SharedFolder name="" type =""/> 
     <SharedFolder name="" type =""/> 
</Server> 

,使生成的XML將類似於下面:

<?xml version="1.0" encoding="utf-8" ?> 
<lastconnectedServers> 
    <Server ip="" domain=""> 
     <SharedFolder name="" type=""/> 
     <SharedFolder name="" type =""/> 
     <SharedFolder name="" type =""/> 
    </Server> 
</lastconnectedServers > 
+0

你使用libxm2有什麼用處? – 2010-11-18 07:30:53

+0

當發佈這樣的問題時,您至少應該表明您已經嘗試過,而不是等待某人爲您編寫所有代碼。 – 2010-11-21 11:12:00

+0

@ OJ,我已經嘗試使用XMLLite,它不使用追加任何地方。完全不知道MSXML是否使用輸出參數,並且絕對沒有樣本,因此沒有有效的代碼顯示 – Simsons 2010-11-22 11:25:36

回答

3

以下是使用MSXML的示例代碼。 COM錯誤檢查被省略。 for代碼看起來有點羅嗦,因爲ATL助手用於COM的使用,但是編程模型遵循W3C DOM API,這很好的被XML開發人員所接受。

CComPtr<IXMLDOMDocument2> spDoc; 
CComPtr<IXMLDOMElement> spServerElement, spSharedFolderElement; 
CComPtr<IXMLDOMNode> spServerNode, spLastConnectedServerNode; 
IXMLDOMNode* pInsertedNode; 
VARIANT_BOOL varSucc; 
CComBSTR bstrLastConnected = L"<?xml version=\"1.0\" encoding=\"utf-8\" ?> \ 
           <lastconnectedServers> \ 
           </lastconnectedServers >"; 

spDoc.CoCreateInstance(CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER); 
spDoc->put_async(VARIANT_FALSE); 
spDoc->loadXML(bstrLastConnected, &varSucc); 

// Finds the lastConnectedServerNode node with XPath. 
spDoc->selectSingleNode(CComBSTR(L"/lastconnectedServers"), 
    &spLastConnectedServerNode); 

// Creates and appends Server node. 
spDoc->createElement(CComBSTR(L"Server"), &spServerElement); 
spServerElement->setAttribute(CComBSTR(L"ip"), CComVariant(L"")); 
spServerElement->setAttribute(CComBSTR(L"domain"), CComVariant(L"")); 
spLastConnectedServerNode->appendChild(spServerElement, &pInsertedNode); 

// Creates and appends the first SharedFolder elements. 
spDoc->createElement(CComBSTR(L"SharedFolder"), &spSharedFolderElement); 
spSharedFolderElement->setAttribute(CComBSTR(L"name"), CComVariant(L"")); 
spSharedFolderElement->setAttribute(CComBSTR(L"type"), CComVariant(L"")); 
spServerElement->appendChild(spSharedFolderElement, &pInsertedNode); 

// Creates the second and third SharedFolder elements... 

// Gets the xml content. 
CComBSTR bstrXml; 
spDoc->get_xml(&bstrXml); 

wprintf(L"%s", (LPCWSTR) bstrXml); 

希望這會有所幫助。

2
TiXmlDocument doc("YourFile.xml"); 
bool loadOkay = doc.LoadFile(); 

if(loadOkay) 
{ 
    //Variables for XML elements and attributes 
    TiXmlElement *pRoot; 
    //Get root element 
    pRoot = doc.RootElement(); 
      TiXmlElement * server = new TiXmlElement("Server"); // Create the new child element 
      server->LinkEndChild(pRoot);//Links the child to the parent 
      server->setAttribute("ip", ""); // Set attributes 
      server-setAttribute("domain",""); 
      foeach(/*Your Data as Value*/) 
      { 
       TiXmlElement * sharedFolder = new TiXmlElement("SharedFolder"); 
       server->LinkEndChild(sharedFolder); 
       server->setAttribute("name", ""); 
       server-setAttribute("type",""); 
      } 


} 
if(doc.SaveFile("YourOutput.xml")) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 

這應該允許您將新的子元素添加到根元素,並且是執行此操作的基本結構。您可以找到更多關於TinxyXML的信息以及如何使用它here