20070131 xml 缩进

http://www.yippeesoft.com

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";类推

历史博文

标签:
七月 4, 2007 at 2:08 下午 by yippee 1,075 次
Category: Dev
Tags: