用simpleXML 如何读取<![CDATA[ ]]> 中的内容呢

我想用SimpleXML来解析一个XML,并用它读取<![CDATA[]]>标签中的内容并更改,但一直没有成功。希望哪位大侠出出招,指点下~~急!!!在线等!!高分相送!... 我想用SimpleXML来解析一个XML,并用它读取<![CDATA[ ]]>标签中的内容并更改,但一直没有成功。
希望哪位大侠出出招,指点下~~

急!!! 在线等!!高分相送!!

xml如下:

<?xml version="1.0" encoding="GBK"?>
<Script>
<ID>243</ID>
<BID/>
<ScriptFile>gentoo_GLSA-200705-20.nasl</ScriptFile>
<Version>1.1</Version>
<CVEID>CVE-2006-6731 CVE-2006-6736 CVE-2006-6737 CVE-2006-6745</CVEID>
<XRef>
<Name>GLSA</Name>
<Value>200705-20</Value>
</XRef>
<Name>
<![CDATA[
[GLSA-200705-20] Blackdown Java: Applet权限提升
]]>
</Name>
<Summary>
<![CDATA[
Blackdown Java: Applet权限提升
]]>
</Summary>
<Description>
<![CDATA[
远程主机存在在GLSA-200705-20中描述的漏洞。
影响:攻击者可以诱使用户运行特别构造的Java小应用程序或者应用程序,这可能使拥有运行JVM,访问数据保存在其他Java小应用程序,或者提升当前运行的Java小应用程序或者应用程序的权限考虑到未授权存取的用户可以读写或执行本地文件。
临时解决方案:目前没有临时解决方案。
参考:
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-6731
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-6736
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-6737
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-6745
]]>
</Description>
<Risk>中</Risk>
<CVSS/>
<Solution>
<![CDATA[
由于现在从Blackdown没有修复升级包且这个漏洞只发生在小应用程序中,"nsplugin"USE标志在portage tree中被标记。
- emerge --sync
- emerge --ask --oneshot --verbose ">=dev-lang/php-4.4.7"
]]>
</Solution>
<Family>19</Family>
<Dependencies>
<ID>12634</ID><File>ssh_get_info.nasl</File>
</Dependencies>
<RequirePort>
<Name/>
<Value/>
</RequirePort>
</Script>
展开
 我来答
祚胤17
2009-07-19 · TA获得超过786个赞
知道大有可为答主
回答量:1149
采纳率:82%
帮助的人:262万
展开全部
37.读取XML数据库
//#include <string>
//using namespace std;
char sRead[5192];
const char* name="Name";
const char* name2="author";
const char* root="ProductData";
const char* subNodeTag="Product";
const char* ID="pid";
//%%2="ProductData" //%%4="pid" //%%6="author"
//%%3="Product" //%%5="Name"
char sRead[5192];
CFile mFile(_T("Produces.xml"),CFile::modeRead);
mFile.Read(sRead,5192);
if(sRead!=NULL)
{
string tmp;
while(sRead!=NULL)
{
tmp.append(sRead);
mFile.Read(sRead,5192);
}
string target("001"),globalTag;globalTag.append("<");globalTag.append(root);globalTag.append(">");
string propTag1;propTag1.append("<");propTag1.append(name);propTag1.append(">");
string endTag1;endTag1.append("</");endTag1.append(name);endTag1.append(">");
string propTag2;propTag2.append("<");propTag2.append(name2);propTag2.append(">");
string endTag2;endTag2.append("</");endTag2.append(name2);endTag2.append(">");
int offset=tmp.find_first_of(globalTag);
while(offset)
{
offset=tmp.find_first_of(globalTag);
string description;
tmp.copy(description.begin(),tmp.find_first_of("\"",offset+1)-offset);
if(target.compare(description)==0)
{
string prop,prop2;
offset=tmp.find_first_of(propTag1,offset)+strlen(name)+2;
tmp.copy(prop.begin(),tmp.find_first_of(endTag1,offset)-

offset,offset);
offset=tmp.find_first_of(propTag2,offset)+strlen(name2)+2;
tmp.copy(prop2.begin(),tmp.find_first_of(endTag2,offset)-offset,offset);
//CString %%8(prop),%%9(prop2);
//%%10
return 0;
}
}
}
else
return -1;

38.写入XML数据库
//#include <string>
//using namespace std;
char sRead[5192];
int no;
const char* name="Name";
const char* name2="author";
const char* root="ProductData";
const char* subNodeTag="Product";
const char* ID="pid";
//%%2="ProductData" //%%4="pid" //%%6="port"
//%%3="Product" //%%5="Name" //%%7="author"
CString temp;
char sRead[5192];
string description;
CFile mFile(_T("Produces.xml"),CFile::modeRead);
mFile.Read(sRead,5192);
if(sRead!=NULL)
{
string tmp;
while(sRead!=NULL)
{
tmp.append(sRead);
memset(sRead,0,5192);
mFile.Read(sRead,5192);
}
temp.Format("<%s %s",subNodeTag,ID);
int offset=tmp.find_last_of(temp)+strlen(subNodeTag) +strlen(ID)+4;
temp.Format("\"><%s",name);
tmp.copy(description.begin(),tmp.find_last_of(temp)- offset,offset);
no=atoi(description.c_str())+1;
mFile.Close();
temp.Format("</%s>",root);
CString temp2;
temp2.Format("<%s %s=\"%d\"><%s>%s</%s><%s>%s</%s>",subNodeTag,ID,no,name,"bbbbbbbbbbbbbbbb",name,name2,"cccccccccccccc",name2);
tmp.insert(tmp.find_last_of(temp),temp2);
CFile file(_T("Produces.xml"),CFile::modeWrite);
file.Write(tmp.c_str(),tmp.size());
file.Flush();
file.Close();
}
else
{
CFile file(_T("Produces.xml"),CFile::modeWrite|CFile::modeCreate);
temp.Format("<?xml version=\"1.0\" encoding=\"gb2312\"?><%s><%s %s=\"0\"><%s>%s</%s><%s>%s</%s></%s></%s>",root,subNodeTag,ID,name,"bbbbbbbbbbbbbbbb",name,name2,"cccccccccccccc",name2,subNodeTag,root);
file.Write(temp.GetBuffer(0),temp.GetLength());
file.Flush();
file.Close();
}
margox
2014-07-05 · TA获得超过174个赞
知道小有建树答主
回答量:178
采纳率:33%
帮助的人:132万
展开全部
simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
在simplexml_load_string/simplexml_load_file方法后面带上两个参数就行了。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
25...9@qq.com
2009-07-18 · TA获得超过102个赞
知道答主
回答量:355
采纳率:0%
帮助的人:98万
展开全部
而且还是个中高手才能帮你解决了

1000分或许还有一个高手能进来看

看到你的标题我都晕了

纯粹进来抢分的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
谢谢依
推荐于2016-09-15 · TA获得超过4043个赞
知道大有可为答主
回答量:1947
采纳率:0%
帮助的人:1970万
展开全部
这是本人帮你找的,希望可以帮到你:

------------------------------------------------------------------
-------------------------------------------------------------------
----------------------------------------------------------------------
所有XML处理程序必须支持Unicode字符编码的两种形式:UTF-8和UTF-16。XML Parser可以读取使用ISO-8859-1、Big-5或者Shift-JIS编码的文档,并在加载文档时将它们自动转换为Unicode。

如果XML文档使用的字符编码不是UTF-8(8-bit ASCII文本也是可接受的UTF-8)或者UTF-16,那么它必须在XML声明中提供字符编码声明,否则XML Parser可能会出错。当然,即使对字符编码进行了声明,Parser也可能不能够处理(不支持该编码),但能够正确地给出提示信息。(由于XML声明是使用基本的ASCII文本书写的,Parser能够正确地读出它的内容。)

. 导入MSXML

首先,需要导入MSXML头文件和库到VC6.0工程中。有两种导入方式:6U6Linux联盟
(1)自动方式,在源代码中添加如下两行程序即可:6U6Linux联盟
#import <msxml4.dll>6U6Linux联盟
using namespace MSXML2;6U6Linux联盟
(2)手动方式(有存在的理由么?呵呵)6U6Linux联盟
a)找到MSXML 4.0 SDK的安装目录,去发现两个子目录inc和lib;6U6Linux联盟
b)在VC选项中,将MSXML 4.0下inc和lib子目录添加到默认的头文件和库文件搜索路径中;6U6Linux联盟
c)在使用MSXML的源文件中包含头文件<msxml2.h>;6U6Linux联盟
d)在工程设置中将msxml2.lib添加到要链接的库中。

以自动方式导入MSXML,会在你的工程目录下(或者Debug/Release下)生成两个头文件msxml4.tlh和msxml4.tli(前者为头文件声明,后者为内联函数定义文件)。
----------------------------------------------------------------------
-----------------------------------------------------------------------如果是遍历一个未知XML文档,就需要使用IXMLDOMDocumentPtr的documentElement获得根元素,使用 IXMLDOMNodePtr的firstChild、nextSibling成员获得一个节点的所有子节点;使用IXMLDOMNodePtr的 nodeType成员来判断节点类型(元素、属性、文本,等等),使用text成员得到文本值,使用nodeName成员得到节点名。还可以使用 IXMLDOMDocumentPtr、IXMLDOMNodePtr等的xml成员获得相应的xml字符串。另详细的资料请参考MSXML 4.0 SDK文档。

另外,在程序中动态创建的text节点的text值的数据量大小是有限的,在我的机器上测试发现(默认VC配置),使用256K的数据还正常,但使用512K的数据时就Stack Overflow了。但是,加载XML文档时是没有问题的,其数据量并不受此限制。

最后,在你使用MSXML DOM时,请清醒地认识到它在内部是一颗树的表示,任何数据都是以节点形式存在的。That’s all!
----------------------------------------------------------------------
--------------------------------------------------------------------
$xml = simplexml_load_string($string, 'SimpleXMLElement', LIBXML_NOCDATA); 这样就可以了。
---------------------------------------------------------------
-----------------------------------------------------------------

这是本人帮你找的,希望可以帮到你。。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ps2009
2009-07-18 · TA获得超过1076个赞
知道小有建树答主
回答量:391
采纳率:0%
帮助的人:202万
展开全部
不是高手还真解决不了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式