20070131 xml 缩进
str.Format(_T("%d"),p->start);
pElement = docPtr->createElement(_T("line"));
pElement->setAttribute(_T("start"),str.AllocSysString());
pElement->Puttext(p->strLyric.AllocSysString());
pdf->appendChild(docPtr->createTextNode("\\n\\t\\t"));
pdf->appendChild(pElement);
p=p->next;
****************************************8
pdf->appendChild(docPtr->createTextNode("\\n\\t\\t"));
通过插入这种节点手工实现缩排
ATField (field) 2004-03-12 09:12:10 在 / 提问
我在使用IXMLDOMDocument->save方法时,保存的XML文件看起来如下:
<?xml version="1.0">
<!– –>
<Root><Child1><Child2></Child2></Child1></Root>
我想让保存的XML文件能够自动缩进,即:
<root>
<Child1>
<Child2>
</Child2>
<Child1>
</root>
(不知道CSDN能不能把上面的显示对)
我希望能够使用MSXML中的类来完成这件事。如果直接操作文本文件可是可以,就是过于复杂。我看过IXMLDOMDocument的成员,没有提供这样的方法。
不然如果一行的话,好像会变得不能认识了
我在VC程序中创建了一些节点,并且用IXMLDomDocument.save方法存到一个文件中,可是文件中的元素之间没有间隔(空格或TAB),如何才能够在save的时候加上缩进呢?
问msxml如和控制缩进和换行(VC/MFC HTML/XML)
——————————————————————————–
save后,节点的缩进全乱了,而且都挤在一行,有什么办法可以控制
——————————————————————————–
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
下面这个函数可以缩进:
void AddWhiteSpaceToNode(IXMLDOMDocument* pDom,IXMLDOMElementPtr xmlNode,BSTR bstrWs)
&leftsign;
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;
&rightsign;
下面这个函数可以缩进:
void AddWhiteSpaceToNode(IXMLDOMDocument* pDom,IXMLDOMElementPtr xmlNode,BSTR bstrWs)
&leftsign;
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;
&rightsign;
例如:我们需要换行和加一个TAB
可以这样调用:
BSTR bstr_wsnt= L"\\n\\t";
AddWhiteSpaceToNode(pDoc,xmlNode,bstr_wsnt);
pDoc是创建DOMDocument对象,xmlNode是节点,调用完以后,即在该节点下换行并加了一个TAB,
如果要加两个TAB,可以BSTR bstr_wsnt= L"\\n\\t\\t";类推
历史博文
- 用u盘制作grub启动盘[来源不详] - 2010
- 20081103 c# fontsize height - 2009
- 20071014 WTITW 微型博客 - 2008
- 0306 vprintf trace Debug Assertion Failed info - 2006
- TortoiseCVS中文帮助-Update commit Resolve - 2005
- 团队合作精神和沟通能力 培训小结 home personal - 2005
- C# 溢出 int unchecked - 2005