2010-11-18 2 views
2

Я имею следующую структуру XML, так что я могу добавить свои данные конфигурации в lastconnected элемент:Добавление элементов XML и атрибутов

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

Теперь я хочу сделать некоторые операции XML, как добавление элементов и attributes.For примере I хотят, чтобы добавить элементы в 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? –

+0

при публикации такого вопроса вы должны хотя бы указать, что вы уже пытались, а не просто ждать, пока кто-то напишет весь код для вас. –

+0

@ OJ, я пробовал с XMLLite, который не использует append где-либо. Полностью не знал, использует ли MSXML выходной параметр и не было абсолютно никаких выборок, и, следовательно, не было никакого действительного кода для показа – Simsons

ответ

3

Вот пример кода с использованием MSXML. Проверка ошибок COM не указана. для кода выглядит немного многословным из-за помощников 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

Смежные вопросы