查询xml出错 在线等 急急急

yaoyuhang 2003-02-26 09:09:58
查询代码如下:
private void Button1_Click(object sender, System.EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load("C:\\Inetpub\\wwwroot\\test\\booksort.xml");

XmlNode book;
XmlNode root = doc.DocumentElement;

book=root.SelectSingleNode("descendant::book[price='24.95']");

//Change the price on the book.
book.LastChild.InnerText="15.95";
Console.WriteLine("Display the modified XML document....");
doc.Save(Console.Out);

}

xml文档如下:
<?xml version="1.0"?>
<!-- a fragment of a book store inventory database -->
<bookstore xmlns="http://tempuri.org/booksort.xsd" xmlns:bk="urn:samples">
<book genre="novel" publicationdate="1997">
<title>Pride And Prejudice</title>
<author>
<first-name>Jane</first-name>
<last-name>Austen</last-name>
</author>
<price>24.95</price>
</book>
<book genre="novel" publicationdate="1992">
<title>The Handmaid's Tale</title>
<author>
<first-name>Margaret</first-name>
<last-name>Atwood</last-name>
</author>
<price>29.95</price>
</book>
<book genre="novel" publicationdate="1991">
<title>Emma</title>
<author>
<first-name>Jane</first-name>
<last-name>Austen</last-name>
</author>
<price>19.95</price>
</book>
<book genre="novel" publicationdate="1982">
<title>Sense and Sensibility</title>
<author>
<first-name>Jane</first-name>
<last-name>Austen</last-name>
</author>
<price>19.95</price>
</book>
</bookstore>

出错信息如下:
未将对象引用设置到对象的实例。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:


行 65: book.LastChild.InnerText="15.95";

另外我想知道书写xpath的规则
...全文
47 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
saucer 2003-02-26
  • 打赏
  • 举报
回复
your xml has a default namespace:
<bookstore xmlns="http://tempuri.org/booksort.xsd">
^^^^^^

so all your elements are under "http://tempuri.org/booksort.xsd", you could remove it
<bookstore xmlns:bk="urn:samples">

then your old code will work
yaoyuhang 2003-02-26
  • 打赏
  • 举报
回复
to 思归
真的不愧为 五星级 人物
佩服 佩服
问题解决了 马上给分
如果能告知小弟 问题出在那里更是感激
我可以在添加问题再给分

还要感谢其他热心高手 谢谢!!
saucer 2003-02-26
  • 打赏
  • 举报
回复
try

XmlDocument doc = new XmlDocument();
doc.Load("..........");
XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
xnm.AddNamespace("xx","http://tempuri.org/booksort.xsd");

XmlNode book;
XmlNode root = doc.DocumentElement;

book=root.SelectSingleNode("xx:book[xx:price='24.95']", xnm);
if (book != null)
{
//Change the price on the book.
book.LastChild.InnerText="15.95";
}
yaoyuhang 2003-02-26
  • 打赏
  • 举报
回复
有没有什么办法
在查询后判断是否有查询结果
yaoyuhang 2003-02-26
  • 打赏
  • 举报
回复
to 楼上大侠
我知道是没有查询结果.
可是不应该啊
xml中有相应的数据节点啊

xpath是按照msdn中照搬的
不应该有错啊

郁闷
toptry 2003-02-26
  • 打赏
  • 举报
回复
应该是下面这行所获得的值为null,所以无法获得其属性。
book=root.SelectSingleNode("descendant::book[price='24.95']");

yaoyuhang 2003-02-26
  • 打赏
  • 举报
回复
急急
yaoyuhang 2003-02-26
  • 打赏
  • 举报
回复
看来晚上人气不旺啊
yaoyuhang 2003-02-26
  • 打赏
  • 举报
回复
急急

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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