无法找到xml节点

naonaoye 2011-08-12 09:53:52
代码如下

string xmlpath = FileUpload1.PostedFile.FileName;
XmlDocument xml = new XmlDocument();
xml.Load(xmlpath);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("", "http://xml.com");


XmlNode list = xml.SelectSingleNode("events",nsmgr);
XmlElement xe = xml.CreateElement("event");
xe.SetAttribute("type", "test");
XmlElement xe1 = xml.CreateElement("eventDate");
xe1.InnerText = "2011-08-12";
xe.AppendChild(xe1);
list.AppendChild(xe);
xml.Save(xmlpath);


xml文件如下

- <ee xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xml.com">
<events>
<event>
<eventDate>2011-06-06</eventDate>
</event>
</events>
</ee>


为什么list一直是null呢?个人感觉是namespace的问题,但不知道哪里出错
...全文
87 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
naonaoye 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 huangwenquan123 的回复:]
引用 14 楼 naonaoye 的回复:
多谢13楼的指点,不过这样生成后每个event都会多个xmlns=""的属性,有办法去掉吗?
你在创建event节点的时候把他的命名空间设置和父节点一样

C# code

XmlElement xe = xml.CreateElement("event", "http://xml.com");
[/Quote]
多谢
huangwenquan123 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 naonaoye 的回复:]
多谢13楼的指点,不过这样生成后每个event都会多个xmlns=""的属性,有办法去掉吗?
[/Quote]你在创建event节点的时候把他的命名空间设置和父节点一样
XmlElement xe = xml.CreateElement("event", "http://xml.com");
naonaoye 2011-08-12
  • 打赏
  • 举报
回复
多谢13楼的指点,不过这样生成后每个event都会多个xmlns=""的属性,有办法去掉吗?
huangwenquan123 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 naonaoye 的回复:]
<ee xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xml.com">
<events>
<event>
<eventDate>2011-06-06</eventDate>
</event>
</events>
</ee>
[/Quote]

//你定义的ee的命名空间是http://xml.com,下列所有的节点都属于这个命名空间
//查询的时候要带上命名空间
string xmlpath = @"E:\x.xml";
XmlDocument xml = new XmlDocument();
xml.Load(xmlpath);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("a", "http://xml.com");
XmlNode list = xml.SelectSingleNode("/a:ee/a:events", nsmgr);
XmlElement xe = xml.CreateElement("event");
xe.SetAttribute("type", "test");
XmlElement xe1 = xml.CreateElement("eventDate");
xe1.InnerText = "2011-08-12";
xe.AppendChild(xe1);
list.AppendChild(xe);
xml.Save(xmlpath);
honkerhero 2011-08-12
  • 打赏
  • 举报
回复
无语。。。服务器取路径都用server.mappath
naonaoye 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 honkerhero 的回复:]
FileUpload1.PostedFile.FileName;

明显是客户端上传的文件。。。
[/Quote]
只是在开发的时候取一个路径而已,没有任何的上传需求
honkerhero 2011-08-12
  • 打赏
  • 举报
回复
FileUpload1.PostedFile.FileName;

明显是客户端上传的文件。。。
naonaoye 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 honkerhero 的回复:]
你没有上传文件到服务器,就算你手动把这个文件放到网站内,等布置到IIS也会出错
这种文件必须上传到服务器再读写
[/Quote]
等发布的时候文件都会在服务器,这点不用操心,谢谢
honkerhero 2011-08-12
  • 打赏
  • 举报
回复
你没有上传文件到服务器,就算你手动把这个文件放到网站内,等布置到IIS也会出错
这种文件必须上传到服务器再读写
naonaoye 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 honkerhero 的回复:]
D:\aaa,xml, 你这个文件怎么可能在网站根目录下???


注意是网站根目录(就是说要在网站内),不是磁盘根目录
[/Quote]
在没有命名空间的情况下是可以新增元素的,和目录无关
honkerhero 2011-08-12
  • 打赏
  • 举报
回复
D:\aaa,xml, 你这个文件怎么可能在网站根目录下???


注意是网站根目录(就是说要在网站内),不是磁盘根目录
naonaoye 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 honkerhero 的回复:]
你先调试一下,看盾你的xmlpath是什么值
[/Quote]
"D:\\aaa.xml"
honkerhero 2011-08-12
  • 打赏
  • 举报
回复
你可以去掉namespace的设置,如果XML里没有多个命名空间的话
honkerhero 2011-08-12
  • 打赏
  • 举报
回复
你先调试一下,看盾你的xmlpath是什么值
naonaoye 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 honkerhero 的回复:]
都没有上传, 文件还在客户端呢,怎么可能读得到啊。

客户端和服务器默认不在一台机器上,即使你开发时在一台机器上, 后台程序也访问不到网站根目录以外的文件。
[/Quote]
都在根目录也找不到节点
honkerhero 2011-08-12
  • 打赏
  • 举报
回复
都没有上传, 文件还在客户端呢,怎么可能读得到啊。

客户端和服务器默认不在一台机器上,即使你开发时在一台机器上, 后台程序也访问不到网站根目录以外的文件。

62,052

社区成员

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

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

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

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