为何XmlNode的节点值为空?

csd08 2005-08-26 06:03:51
我的代码:
public void ParseXMlFile(string filename)
{
// 创建一个XmlTextReader类的对象并调用Read方法来读取文件
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load( filename);

XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取Employees节点的所有子节点
foreach(XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
if(xe.Value!=null)
listBox1.Items.Add(" - NodeValue"+xe.Value.ToString());
listBox1.Items.Add("Name:"+xe.Name);
listBox1.Items.Add(" - AttrCount:"+xe.Attributes.Count.ToString());
listBox1.Items.Add(" - NodeType:"+xe.NodeType.ToString());

}
我每次xe.Value都是null,为什么啊?而且,HasChildNodes都是true的,明明没有了子节点,还是true!我都不知道是什么原因啦。

另外,如果我用XmlTextReader则是可以获取到节点值的,难道XmlDocument 就不可以吗?

各位fans,请多多帮忙解决啊。


我的xml文件是这样的:

<?xml version='1.0'?>
<!-- This file represents a fragment of a book store inventory database -->
<bookstore>
<book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<first-name>Sidas</first-name>
<last-name>Plato</last-name>
</author>
<price>9.99</price>
</book>
</bookstore>



我是用C#写的。

^_^





...全文
766 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
senkiner 2005-08-29
  • 打赏
  • 举报
回复
SelectSingleNode你试着读一下下面的XML,也许可以给你一些灵感。。。。。。

<?xml version='1.0'?>
<!-- This file represents a fragment of a book store inventory database -->
<bookstore>
Text at here...
</bookstore>
csd08 2005-08-29
  • 打赏
  • 举报
回复
NodeType为Text的时候,Value才不为空,这个是对的,但是我得出的NodeType全是element,而用XmlTextReader 的时候,有些是text的,为什么?
csd08 2005-08-27
  • 打赏
  • 举报
回复
是这样的吗?但是如果定义 XmlTextReader objTxtRd,则objTxtRd.Value是有值的啊,比如可以获得“The Autobiography of Benjamin Franklin”,难道这不是值吗?其实,我就是想获得这些东西啊,或者通过其它方法可以获取吗?
Alden 2005-08-26
  • 打赏
  • 举报
回复
楼上说的对.
senkiner 2005-08-26
  • 打赏
  • 举报
回复
我记得好像是NodeType为Text的时候,Value才不为空,楼主再看看
Tony_lau111082 2005-08-26
  • 打赏
  • 举报
回复
XmlNodeList nodeList=xmlDoc.SelectNodes("bookstore").ChildNodes
//XmlNode.h //版本:V1.01测试版 //为帮助作者完善XmlNode,希望大家讲错误发送给作者,以完善其功能 #ifndef XML_NODE_H #define XML_NODE_H #define XML_OBJECT_TYPE_ERROR 0x00 //节点类型错误 #define XML_OBJECT_TYPE_DOCUMENT 0x01 //节点类型为文档,即为xml节点,用于记录文件路径 #define XML_OBJECT_TYPE_DECLARATION 0x02 //节点类型为描述 #define XML_OBJECT_TYPE_ATTRIBUTE 0x03 //节点类型为属性 #define XML_OBJECT_TYPE_COMMENT 0x04 //节点类型为注释 #define XML_OBJECT_TYPE_CHAR_DATA 0x05 //节点类型为不被解析的字符数据 #define XML_OBJECT_TYPE_ELEMENT 0x06 //节点类型为子节点 #define XML_OBJECT_TYPE_VALUE 0x07 //节点类型为值节点 #define XML_OBJECT_TYPE_MAX 0x07 //节点类型的最大值 #include #include using namespace std; class __declspec(dllexport)CXmlNode { protected: CXmlNode(); public: ~CXmlNode(); public: /*************************************************** Type: static public Explain: 获取作者信息 Return: 作者信息 ***************************************************/ static string GetAuthorInfo(); /*************************************************** Type: static public Explain: 获取版本信息 Return: 版本信息 ***************************************************/ static string GetVersionInfo(); /*************************************************** Type: static public Explain: 读取xml文件 Para: [in] sPath xml文件路径 Return: 根节点指针。 Mark: 当读取xml文件失败时,返回0 ***************************************************/ static CXmlNode * LoadFile(string sPath); /*************************************************** Type: public Explain: 保存Xml文件 Para: [in] sPath xml文件路径,当sPath为时,将默认保存在上次读取时的路径中 Return: 保存文件是否成功。 Mark: 如果当前节点为根节点,则记录的xml文件路径将被替换 如果当前节点不是跟节点,只保存当前节点和其所有子节点。为保证xml文件格式正确,将自动在Xml中添加声明 ***************************************************/ bool SaveFile(string sPath); /*************************************************** Type: public Explain: 保存Xml文件 Return: 保存文件是否成功。 Mark: xml文件保存路径为已经设置的路径,默认为打开文件时的路径,也可以通过SetValue函数修改路径,详见SetValue函数说明 如果当前节点为根节点,则记录的xml文件路径将被替换 如果当前节点不是跟节点,只保存当前节点和其所有子节点。为保证xml文件格式正确,将自动在Xml中添加声明 **********************

111,112

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧