appending "\n" or "\t" textnodes var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.4.0"); xmlDoc.async = false; // preserveWhiteSpace is useful when loading // existing documents. xmlDoc.preserveWhiteSpace = true; xmlDoc.appendChild(xmlDoc.createElement("root")); xmlDoc.documentElement.appendChild( xmlDoc.createTextNode("\r\n\t")); xmlDoc.documentElement.appendChild( xmlDoc.createElement("child")); xmlDoc.documentElement.appendChild( xmlDoc.createTextNode("\r\n")); xmlDoc.save("test.xml"); you can also use MXXMLWriter and set its indent property http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/6139a6fe-7d4c-449d-9e36-60b68be1de71.asp
//It returns IXMLDOMElement that represents the single element that represents the root of the XML document tree. //ptrXMLDom->documentElement // 加节点user_information //ptrXMLDom->documentElement->appendChild(ptrXMLDom->createTextNode("\n\t"));
xmlDoc.async = false;
// preserveWhiteSpace is useful when loading
// existing documents.
xmlDoc.preserveWhiteSpace = true;
xmlDoc.appendChild(xmlDoc.createElement("root"));
xmlDoc.documentElement.appendChild(
xmlDoc.createTextNode("\r\n\t"));
xmlDoc.documentElement.appendChild(
xmlDoc.createElement("child"));
xmlDoc.documentElement.appendChild(
xmlDoc.createTextNode("\r\n"));
xmlDoc.save("test.xml");
you can also use MXXMLWriter and set its indent property
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/6139a6fe-7d4c-449d-9e36-60b68be1de71.asp
void AddWhiteSpaceToNode(IXMLDOMDocument* pDom,IXMLDOMElementPtr xmlNode,BSTR bstrWs)
{
IXMLDOMText *pws=NULL;
IXMLDOMNode *pBuf=NULL; pDom->raw_createTextNode(bstrWs,&pws);
xmlNode->raw_appendChild(pws,&pBuf);
if (pws) pws->Release();
pws=NULL;
if (pBuf) pBuf->Release();
pBuf=NULL;
}例如:我们需要换行和加一个TAB
可以这样调用:
BSTR bstr_wsnt= L"\n\t";
AddWhiteSpaceToNode(pDoc,xmlNode,bstr_wsnt);
pDoc是创建DOMDocument对象,xmlNode是节点,调用完以后,即在该节点下换行并加了一个TAB,
如果要加两个TAB,可以BSTR bstr_wsnt= L"\n\t\t";类推
if(ptr!=NULL) \
{ \
ptr->Release(); \
ptr = NULL; \
} #import <msxml3.dll>
using namespace MSXML2;
void AddWhiteSpaceToNode(IXMLDOMDocument* pDom,
IXMLDOMElementPtr xmlNode,BSTR bstrWs);int main(int argc, char* argv[])
{
CoInitialize(NULL); //COM initial IXMLDOMDocumentPtr ptrXMLDom;
HRESULT hr;
hr = ptrXMLDom.CreateInstance(__uuidof(DOMDocument30));
if(FAILED(hr))
{
printf("Failed to CreateInstance on an XML DOM");
return -1;
} ptrXMLDom->preserveWhiteSpace = TRUE; // Create a processing instruction targeted for xml.
IXMLDOMProcessingInstructionPtr pi;
pi = ptrXMLDom->createProcessingInstruction("xml",
"version='1.0' encoding='iso-8859-1' standalone='no'");
if(pi==NULL)
{
printf("Failed to CreateProcessingInstruction");
return -1;
}
else
{
ptrXMLDom->appendChild(pi);
pi.Release();
} // create root
IXMLDOMElementPtr ptrRoot;
ptrRoot = ptrXMLDom->createElement("inms_license");
if(ptrRoot==NULL)
{
printf("Failed to CreateProcessingInstruction");
return -1;
}
else
{
ptrXMLDom->appendChild(ptrRoot);
ptrRoot.Release(); // 这里把根节点也释放了
}
// create 四个框架节点
IXMLDOMElementPtr pe;
BSTR bstr_wsnt = L"\n\r\t";
BSTR bstr_wsnt2 = L"\n\r\t\t"; // 用户信息元素
pe = ptrXMLDom->createElement("user_information");
if(pe==NULL)
{
printf("Failed to createElement 用户");
return -1;
}
else
{
// 元素的属性
IXMLDOMAttributePtr pa;
pa = ptrXMLDom->createAttribute("subscriber");
if(pa!=NULL)
{
pa->value = "aaaa";
pe->setAttributeNode(pa);
pa->Release();
}
//It returns IXMLDOMElement that represents the single element that represents the root of the XML document tree.
//ptrXMLDom->documentElement
// 加节点user_information
//ptrXMLDom->documentElement->appendChild(ptrXMLDom->createTextNode("\n\t"));
AddWhiteSpaceToNode(ptrXMLDom,
ptrXMLDom->documentElement,bstr_wsnt);
ptrXMLDom->documentElement->appendChild(pe);
pe.Release();
}
// function_license
pe = ptrXMLDom->createElement("function_license");
if(pe ==NULL)
{
printf("Failed to createElement 功能");
return -1;
}
else
{
AddWhiteSpaceToNode(ptrXMLDom,
ptrXMLDom->documentElement,bstr_wsnt);
ptrXMLDom->documentElement->appendChild(pe);
//ptrXMLDom->documentElement->appendChild(ptrXMLDom->createTextNode("\n\t"));
pe.Release();
}
// access_license
pe = ptrXMLDom->createElement("hccess_license");
if(pe ==NULL)
{
printf("Failed to createElement 接入");
return -1;
}
else
{
AddWhiteSpaceToNode(ptrXMLDom,
ptrXMLDom->documentElement,bstr_wsnt2);
//ptrXMLDom->documentElement->appendChild(ptrXMLDom->createTextNode("\n\t"));
ptrXMLDom->documentElement->appendChild(pe);
pe.Release();
} // client_license
pe = ptrXMLDom->createElement("client_license");
if(pe ==NULL)
{
printf("Failed to createElement 客户端");
return -1;
}
else
{
//ptrXMLDom->documentElement->appendChild(ptrXMLDom->createTextNode("\n\t"));
ptrXMLDom->documentElement->appendChild(pe);
pe.Release();
}
ptrXMLDom->documentElement->appendChild(ptrXMLDom->createTextNode("\n")); //display xml
printf("Dynamically created DOM:\n%s\n",
(LPCSTR)ptrXMLDom->xml);
// release DOM
if(ptrXMLDom)
ptrXMLDom.Release();
CoUninitialize();
return 0;
}
void AddWhiteSpaceToNode(IXMLDOMDocument* pDom,
IXMLDOMElementPtr xmlNode,BSTR bstrWs)
{
IXMLDOMText *pws=NULL;
IXMLDOMNode *pBuf=NULL; pDom->raw_createTextNode(bstrWs,&pws);
xmlNode->raw_appendChild(pws,&pBuf);
RELEASE_PTR(pws);
RELEASE_PTR(pBuf);
}