请教一个xmldocument控件的问题,我取csdn帖子内容的时候,为什么出提示“element does not contain a single text node. ”
error :
element does not contain a single text node.
是下面一句导致的,读有些帖子就出现上面的错误
Content :=trim(CurNode.ChildNodes['Content'].Text);
比如读到下面的回复:
<Reply>
<PostUserNickName>【我想要飞专用马甲】</PostUserNickName>
<rank>二级(初级)</rank>
<ranknum>user2</ranknum>
<credit>49</credit>
<ReplyID>12434413</ReplyID>
<TopicID>1860577</TopicID>
<PostUserId>34877</PostUserId>
<PostUserName>wangfeng</PostUserName>
<Point>0</Point>
<Content>
<![CDATA[
来了来了!!!!!
]]>
</Content>
<PostDateTime>2003-5-31 23:03:07</PostDateTime>
</Reply>
当content有<![CDATA[ 和 !]]> 这种字符,就不停的报以上错误,为什么啊,怎么解决?
问题点数:50、回复次数:27Top
1 楼dashi(喜欢莲的憨木鱼)回复于 2003-06-02 19:47:06 得分 0
记得C#中是这样读的:
SelectSingleNode(Content="")
这样就没错,不知delphi怎么解决/Top
2 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-06-02 19:52:32 得分 0
首先转换成DOM,
function XMLRefConvert(Source:TXMLDocument):IXMLDOMNode;
begin
Result:=(Source.DocumentElement.DOMNode as IXMLDOMNodeRef).GetXMLDOMNode;
end;
ShowMessage(IXMLRefConvert(XMLDocument1).selectSingleNode("/Reply/Content").text)
这样看看,Top
3 楼dashi(喜欢莲的憨木鱼)回复于 2003-06-02 20:03:15 得分 0
Eastunfail(恶鱼杀手):
提示错误:
[Error] XmlDocSearch.pas(104): Undeclared identifier: 'IXMLDOMNode'Top
4 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-06-02 20:06:41 得分 35
你uses xmldom, XMLIntf,msxml, msxmldom,xmldocTop
5 楼dashi(喜欢莲的憨木鱼)回复于 2003-06-02 20:15:59 得分 0
Eastunfail(恶鱼杀手) :
上面的错误是没有了,不过我想再问你一下:
ShowMessage(IXMLRefConvert(XMLDocument1).selectSingleNode("/Reply/Content").text)
/Reply/Content是不是按照节点的级次依次来取的,比如我想取第一个人的回复的content怎么取啊?
按照你上面的执行后出提示:
access violation at address 00493ad9 in module p_xmldocsearch.exe
不好意思,麻烦你了Top
6 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-06-02 20:24:38 得分 0
这............建议你找本书看看XPath怎么用。
XPath一言两语说不清楚地。
我刚才看了这个页面的XML代码,太混乱了,看不清楚.
Top
7 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-06-02 20:25:19 得分 0
如果出现那个提示,那你不要用.text,换成.nodeText(好像是这)或.nodeValueTop
8 楼dashi(喜欢莲的憨木鱼)回复于 2003-06-02 20:26:38 得分 0
Eastunfail(恶鱼杀手):
我在使用Content :=trim(CurNode.ChildNodes['Content'].Text)读取content内容的时候,正常的情况下是没有问题的,就在读取内容有“<![CDATA[
”和“]]>”的字符时才报这样的错误,element does not contain a single text node.
不知道这是为什么啊?
<Content>
<![CDATA[
来了来了!!!!!
]]>
</Content>
Top
9 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-06-02 20:28:03 得分 0
那你为什么不用我写的方法用XPath搜索节点然后读取DOM类型节点的nodeValue或nodeText属性呢?Top
10 楼dashi(喜欢莲的憨木鱼)回复于 2003-06-02 20:28:20 得分 0
<?xml version="1.0" encoding="GB2312"?>
<?xml-stylesheet type='text/xsl' href='/expert/Xsl/2.xsl'?>
<Topic>
<Issue>
<PostUserNickName>人有病,天知否?</PostUserNickName>
<rank>两星(中级)</rank>
<ranknum>star2</ranknum>
<credit>被封杀</credit>
<TopicId>1860577</TopicId>
<TopicName>[恶人谷] 恶人谷众重新集合</TopicName>
<PostUserId>54522</PostUserId>
<PostUserName>ginger</PostUserName>
<RoomName>扩充话题 灌水乐园</RoomName>
<ReplyNum>32</ReplyNum>
<PostDateTime>2003-5-31 22:51:08</PostDateTime>
<Point>0</Point>
<ReadNum>0</ReadNum>
<RoomId>1404</RoomId>
<EndState>0</EndState>
<Content>
<![CDATA[
rt
]]>
</Content>
</Issue>
<Replys>
<Reply>
<PostUserNickName>【我想要飞专用马甲】</PostUserNickName>
<rank>二级(初级)</rank>
<ranknum>user2</ranknum>
<credit>49</credit>
<ReplyID>12434413</ReplyID>
<TopicID>1860577</TopicID>
<PostUserId>34877</PostUserId>
<PostUserName>wangfeng</PostUserName>
<Point>0</Point>
<Content>
<![CDATA[
来了来了!!!!!
]]>
</Content>
<PostDateTime>2003-5-31 23:03:07</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>星期五</PostUserNickName>
<rank>三级(初级)</rank>
<ranknum>user3</ranknum>
<credit>55</credit>
<ReplyID>12458673</ReplyID>
<TopicID>1860577</TopicID>
<PostUserId>405234</PostUserId>
<PostUserName>zbl101</PostUserName>
<Point>0</Point>
<Content>
<![CDATA[
]]>
</Content>
<PostDateTime>2003-6-2 8:21:44</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>浪客剑心</PostUserNickName>
<rank>五级(中级)</rank>
<ranknum>user5</ranknum>
<credit>100</credit>
<ReplyID>12458759</ReplyID>
<TopicID>1860577</TopicID>
<PostUserId>390681</PostUserId>
<PostUserName>1TH</PostUserName>
<Point>0</Point>
<Content>
<![CDATA[
到..
]]>
</Content>
<PostDateTime>2003-6-2 8:25:45</PostDateTime>
</Reply>
</Replys>
</Topic>
这是读取有问题的也面Top
11 楼dashi(喜欢莲的憨木鱼)回复于 2003-06-02 20:29:13 得分 0
正常的也面没有<![CDATA[ ]]>这样的字符Top
12 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-06-02 20:30:32 得分 0
那你用这个XPath来搜索:/Topic/Replys/Reply[.="wangfeng"]
XPath好久没有用,记得不太清楚了,上面的句子应该没有问题。
用selectSingleNode或selectNodes方法搜索Top
13 楼dashi(喜欢莲的憨木鱼)回复于 2003-06-02 20:30:57 得分 0
回复人: Eastunfail(恶鱼杀手) ( ) 信誉:78 2003-06-02 20:28:00 得分:0
那你为什么不用我写的方法用XPath搜索节点然后读取DOM类型节点的nodeValue或nodeText属性呢?
好的,我用你的方法死死,不过真的很感谢你 :)Top
14 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-06-02 20:31:19 得分 0
:)Top
15 楼dashi(喜欢莲的憨木鱼)回复于 2003-06-02 20:35:40 得分 0
我用了xpath=/Topic/Replys/Reply[.="wangfeng"]
的nodeValue方法试了试,还是报这个错误:
access violation at address 00493ad9 in module p_xmldocsearch.exeTop
16 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-06-02 20:42:48 得分 0
这.....Top
17 楼dashi(喜欢莲的憨木鱼)回复于 2003-06-02 20:54:18 得分 0
:)Top
18 楼cxx1997(小网虫)(最厉害的妖怪))回复于 2003-06-02 20:57:40 得分 10
xd.SelectNodes("//Reply[PostUserName='"+PeopleID+"']")
这样吧,C#是这样的Top
19 楼cxx1997(小网虫)(最厉害的妖怪))回复于 2003-06-02 20:58:24 得分 0
你将会得到一个结点集合
SelectNodesTop
20 楼dashi(喜欢莲的憨木鱼)回复于 2003-06-02 21:04:57 得分 0
楼上的方法我也死了,好象不行啊Top
21 楼dashi888(小网虫?大师?错,是马甲)回复于 2003-06-02 22:01:19 得分 0
upTop
22 楼dashi(喜欢莲的憨木鱼)回复于 2003-06-02 23:09:21 得分 0
upTop
23 楼halfdream(哈欠)回复于 2003-06-03 01:58:53 得分 5
遇上出现element does not contain a single text node.异常情况,
我就再去取这个元素的子节点。。
Top
24 楼3c(摧花公子)回复于 2003-06-03 08:34:11 得分 0
upTop
25 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-06-03 20:32:16 得分 0
<![CDATA[
rt
]]>
应该是
<![CDATA[
rt
]]>
估计错在这里Top
26 楼dashi(喜欢莲的憨木鱼)回复于 2003-06-04 08:37:32 得分 0
哎,奇怪,我看到的明明是<![CDATA[
rt
]]>
,怎么一贴上就变成了<![CDATA[
rt
]]>Top
27 楼dashi(喜欢莲的憨木鱼)回复于 2003-06-04 08:38:16 得分 0
Content>
<![CDATA[
来了来了!!!!!
]]>
</Content>Top




