CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

请教一个xmldocument控件的问题,我取csdn帖子内容的时候,为什么出提示“element does not contain a single text node. ”

楼主dashi(喜欢莲的憨木鱼)2003-06-02 19:46:21 在 Delphi / VCL组件开发及应用 提问

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

&lt;![CDATA[  
  rt  
  ]]&gt;  
   
  应该是    
  <![CDATA[  
  rt  
  ]]>  
  估计错在这里Top

26 楼dashi(喜欢莲的憨木鱼)回复于 2003-06-04 08:37:32 得分 0

哎,奇怪,我看到的明明是<![CDATA[  
  rt  
  ]]>  
  ,怎么一贴上就变成了&lt;![CDATA[  
  rt  
  ]]&gt;Top

27 楼dashi(喜欢莲的憨木鱼)回复于 2003-06-04 08:38:16 得分 0

Content>  
  <![CDATA[  
  来了来了!!!!!  
  ]]>  
  </Content>Top

相关问题

  • 首次用XMLDocument控件,急啊
  • C++Builder中怎样使用Delphi里的控件?(如:XMLDocument)
  • delphi 中的XMLDOCUMENT 这个控件在什么地方?
  • 请问TreeView控件Node的拖动问题.
  • TTreeView控件中Node有没有唯一标示符?
  • 控件!!!
  • 控件
  • edit控件
  • 控件
  • 控件

关键词

  • c#
  • 节点
  • 字符
  • 内容
  • wangfeng
  • nodetext
  • xmldocsearch
  • reply
  • xpath
  • xmldocument

得分解答快速导航

  • 帖主:dashi
  • Eastunfail
  • cxx1997
  • halfdream

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo