关于XmlDocument与XPath的问题(在线!)

Maxu 2003-07-28 10:26:19
private bool SetOptionValue(string userId, string groupId, string optionName, string optionValue)
{
XmlDocument xd = new XmlDocument();
xd.Load("..\\..\\UserOptions.xml");

XmlNode root = xd.DocumentElement;
string p = String.Format("/UserOptions/UserOption[@UserId='{0}']/OptionsGroup[@GroupId='{1}']/Option[@Name='{2}']", userId, groupId, optionName);
XmlNode o = root.SelectSingleNode(p);
o.Attributes["Value"].Value = optionValue;
xd.Save(Console.Out);
return true;
}

调用 SetOptionValue('c', '1', 'distance', '100')
在XmlNode o = root.SelectSingleNode(p);
o得到空值??

命令窗口结果:
root.SelectSingleNode("UserOption[@UserId='c']/OptionsGroup[@GroupId='1']/Option[@Name='distance']")
函数“root.SelectSingleNode”已求值并返回空

root.SelectNodes("UserOption[@UserId='c']/OptionsGroup[@GroupId='1']/Option[@Name='distance']")
{System.Xml.XPath.XPathNodeList}
System.Xml.XmlNodeList: {System.Xml.XPath.XPathNodeList}
list: {Count=0}
iterator: {System.Xml.XPath.XPathSelectionIterator}
done: false
nullparams: {Length=0}
Count: 0
请解答??

文件"..\\..\\UserOptions.xml":

<?xml version="1.0" encoding="utf-8" ?>
<UserOptions xmlns="http://tempuri.org/UserOptions.xsd">
<UserOption UserId="a">
<OptionsGroup GroupId="2">
<Option Name="zoo" Value="12"></Option>
<Option Name="distance" Value="0.5"></Option>
</OptionsGroup>
<OptionsGroup GroupId="1">
<Option Name="zoom" Value="1101"></Option>
<Option Name="distance" Value="0.5"></Option>
</OptionsGroup>
</UserOption>
<UserOption UserId="b">
<OptionsGroup GroupId="1">
<Option Name="zoom" Value="100"></Option>
<Option Name="distance" Value="1"></Option>
</OptionsGroup>
</UserOption>
<UserOption UserId="c">
<OptionsGroup GroupId="1">
<Option Name="zoom" Value="100"></Option>
<Option Name="distance" Value="200"></Option>
</OptionsGroup>
</UserOption>
</UserOptions>
...全文
117 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Maxu 2003-07-28
  • 打赏
  • 举报
回复
It works!! Thanks a lot!!
saucer 2003-07-28
  • 打赏
  • 举报
回复
you have a namespace for your xml file, try

XmlDocument xd = new XmlDocument();
xd.Load("..\\..\\UserOptions.xml");
XmlNamespaceManager xnm = new XmlNamespaceManager(xd.NameTable);
xnm.AddNamespace("a","http://tempuri.org/UserOptions.xsd");
XmlNode root = xd.DocumentElement;
string p = String.Format("/a:UserOptions/a:UserOption[@UserId='{0}']/a:OptionsGroup[@GroupId='{1}']/a:Option[@Name='{2}']", userId, groupId, optionName);
XmlNode o = root.SelectSingleNode(p, xnm);
if (o != null)
{
Console.WriteLine("****{0}*****",o.Attributes["Value"].Value);
o.Attributes["Value"].Value = optionValue;
}

110,825

社区成员

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

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

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