XML换行
来源:互联网 发布:医院网络推广,网络营销 编辑:程序博客网 时间:2024/06/05 00:16
pKCXML.CreateInstance(__uuidof(MSXML2::DOMDocument40))
pDocElement->appendChild(pDoc->createTextNode("\n\t"));
pDocElement->appendChild(pNewChildElement);
1、XML换行实现
CoInitialize(NULL);MSXML2::IXMLDOMDocumentPtr pDoc = NULL;
MSXML2::IXMLDOMElementPtr xmlRoot = NULL;
MSXML2::IXMLDOMProcessingInstructionPtr pPI = NULL;
//创建DOMDocument对象
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
if(!SUCCEEDED(hr))
{
MessageBox(L"无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!");
return TRUE;
}
pPI = pDoc->createProcessingInstruction("xml","version='1.0' encoding='gb2312'");
_variant_t vNullVal;
vNullVal.vt = VT_NULL;
pDoc->insertBefore(pPI, vNullVal);
//根节点的名称为Book
//创建元素并添加到文档中
xmlRoot=pDoc->createElement((_bstr_t)"Banks");
//设置属性
pDoc->appendChild(xmlRoot);
AppendTextNode(pDoc,xmlRoot,_T("\r\n\t"));
//添加“author”元素
MSXML2::IXMLDOMElementPtr pNode;
pNode=pDoc->createElement((_bstr_t)"Bank");
xmlRoot->appendChild(pNode);
AppendTextNode(pDoc,pNode,_T("\r\n\t\t"));
MSXML2::IXMLDOMElementPtr pNode2;
pNode2=pDoc->createElement((_bstr_t)"Head");
pNode->appendChild(pNode2);
AppendTextNode(pDoc,pNode2,_T("\r\n\t\t\t"));
MSXML2::IXMLDOMElementPtr pNode3;
pNode3=pDoc->createElement((_bstr_t)"PBCCode");
pNode3->Puttext("局势");
pNode2->appendChild(pNode3);
AppendTextNode(pDoc,pNode2,_T("\r\n\t\t\t"));
pNode3=pDoc->createElement((_bstr_t)"Code");
pNode3->Puttext("局势");
pNode2->appendChild(pNode3);
///////////////////////////////////////////////////
AppendTextNode(pDoc,pNode2,_T("\r\n\t\t"));
//////////////////////////////////////////////////////
AppendTextNode(pDoc,pNode,_T("\r\n\t\t"));
pNode2=pDoc->createElement((_bstr_t)"Table1");
pNode->appendChild(pNode2);
AppendTextNode(pDoc,pNode2,_T("\r\n\t\t\t"));
pNode3=pDoc->createElement((_bstr_t)"PBCCode");
pNode3->Puttext("局势");
pNode2->appendChild(pNode3);
AppendTextNode(pDoc,pNode2,_T("\r\n\t\t\t"));
pNode3=pDoc->createElement((_bstr_t)"Code");
pNode3->Puttext("局势");
pNode2->appendChild(pNode3);
///////////////////////////////////////////////////
AppendTextNode(pDoc,pNode2,_T("\r\n\t\t"));
//////////////////////////////////////////////////////
AppendTextNode(pDoc,pNode,_T("\r\n\t"));
AppendTextNode(pDoc,xmlRoot,_T("\r\n"));
pDoc->save("C:\\he.xml");
CoUninitialize();
2、XPATH理解和实现
最近在解析XML字符串时,碰到一个很奇怪的问题,经过一番周折总算找到了答案。在此做个小总
结,这也是我写博客的目的之一:将平时开发中总结的小知识点记录下来,以备以后查阅。
先给出一个会出问题的XML示例(自己随便从一个VC工程的.vcproj文件里面截出来的):
<?xml version="1.0" encoding="gb2312"?>
<VisualStudioProject>
<files>
<File Path=".\config.cpp"/>
<File Path=".\config.h"/>
<File Path=".\main.cpp"/>
</files>
</VisualStudioProject>
可以看到在Xpath路径“VisualStudioProject/files”下有三个“File”兄弟节点,如果现在
要对这三个节点进行处理的话,可能我们的做法是这样的:
MSXML2::IXMLDOMNodePtr pNode = pDocumentNode->selectSingleNode(_bstr_t
(L"VisualStudioProject/files/File"));
while(pNode)
{
… // process node
pNode = pNode->nextSibling;
}
看似没有问题的代码,实际运行的话会发生异常。在XML DOM的标准规范中,nextSibling属性
返回某个元素之后紧跟的元素(处于同一树层级)。同时规范提示:Internet Explorer会忽略节
点间生成的空白文本节点(例如,换行符号),而 Mozilla 不会这样做。也就是说,对于换行符
等空白文本节点,有可能会被理解为是一个节点。
通过实例验证,MSXML2接口会将换行符看成一个节点。因此,上面代码的process node过程会
对一个换行符进行处理,导致异常。我们需要在每次处理之前判断一下节点类型,即:
MSXML2::IXMLDOMNodePtr pNode = pDocumentNode->selectSingleNode(_bstr_t
(L"VisualStudioProject/files/File"));
while(pNode)
{
if( pNode->nodeType != NODE_ELEMENT)
{
… // process node
}
pNode = pNode->nextSibling;
}
这个问题如果不加注意的话还是很容易引起麻烦的,因为那个换行符之类的空白文本节点不是
那么引人注目。另外,还有一种方法可以完成我们需要的处理:
MSXML2::IXMLDOMNodeListPtr pNodeList = pDocumentNode->selectNodes(_bstr_t
(L"VisualStudioProject/files/File"));
if( pNodeList)
{
for( long i = 0; i < pNodeList->length; ++i)
{
MSXML2::IXMLDOMNodePtr pNode = pNodeList->item[i];
… // process node
}
}
3、换行另外一种方法
#import "MSXML6.dll" named_guids
using namespace MSXML2 ;
HRESULT hr =
m_spXmlDoc.CreateInstance(__uuidof(MSXML2::DOMDocument60 ),
NULL ,CLSCTX_INPROC);
- XML换行
- XML换行转义符
- XML中回车换行
- xml中怎样换行?
- xml换行符
- mini-xml换行
- XML的换行问题
- 生成xml 换行
- xml换行符
- xml 实体 注释 空格 换行
- Delphi操作XML::自动换行
- XML换行符的问题
- xml中空格换行缩进
- Java生成XML的缩进和换行
- java生成XML文件自动换行问题
- dom实现xml格式化输出(换行)
- string.xml中加入空格、换行
- xml中空格,Tab,回车,换行
- win7 + virutualbox 安装雪豹
- 利用JSFL批量制作
- winphone 开发环境
- hibernate4 与 spring3有点冲突
- 使用SocketChannel的NIO客户机服务器通信示例
- XML换行
- Oracle语句优化规则汇总(8)
- Oracle语句优化规则汇总(9)
- 解决:10.6.7安装xcode 4.2 提示安装失败
- Oracle语句优化规则汇总(10)
- Android ListView中图片的异步加载显示
- 升级hibernate>4,spring>3.1笔记
- Mysql数据库中的一些知识点
- 802.11协议帧间间隔-SIFS,DIFS,PIFS,EIFS