xml的查找

bin_bin 2004-03-18 06:35:27
我想通过下列语句来读取xml中的数据,
可是foo的值总是为空

//……
System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();
xmlDocument.Load("d:\\xmlfoo.XML");
System.Xml.XmlNamespaceManager nsmgr = new System.Xml.XmlNamespaceManager(xmlDocument.NameTable);
nsmgr.AddNamespace(String.Empty,"http://tempuri.org/SPThemes.xsd");
System.Xml.XmlElement root = xmlDocument.DocumentElement;
System.Xml.XmlNodeList foo = root.SelectNodes (String.Format("//Templates"),nsmgr);
//……


xmlfoo.XML:
<?xml version="1.0" encoding="utf-8" ?>
<SPThemes xmlns="http://tempuri.org/SPThemes.xsd">
<Templates>
<TemplateID>none</TemplateID>
<DisplayName>No Theme(Default)</DisplayName>
<Description>Description</Description>
<Thumbnail>../images/thnone.png</Thumbnail>
<Preview>../images/thnone.gif</Preview>
</Templates>
<Templates>
<TemplateID>aftrnoon</TemplateID>
<DisplayName>Afternoon</DisplayName>
<Description>Description</Description>
<Thumbnail>../images/thanoon.png</Thumbnail>
<Preview>../images/thanoon.gif</Preview>
</Templates>
</SPThemes>
...全文
291 31 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
bin_bin 2004-03-19
  • 打赏
  • 举报
回复
谢谢

发过消息了,可能现在不在吧
2002pine 2004-03-19
  • 打赏
  • 举报
回复
你可以问下孟子e章
bin_bin 2004-03-19
  • 打赏
  • 举报
回复
这个文件来自微软的sharepoint
真不知道他们是怎么读写这个文件的
bin_bin 2004-03-19
  • 打赏
  • 举报
回复
关键就是这个命名空间我不能改啊……
2002pine 2004-03-19
  • 打赏
  • 举报
回复
这个问题不知是什么原因,可能是名称空间有点问题,改成这样就可
<SPThemes xmlns:aa="http://tempuri.org/SPThemes.xsd">
showtimenow 2004-03-19
  • 打赏
  • 举报
回复
XPath没有错,能不能把命名空间xmlns="http://tempuri.org/SPThemes.xsd"加个前缀,比如xmlns:ss="http://tempuri.org/SPThemes.xsd"
然后在程序里面nsmgr.AddNamespace("ss","http://tempuri.org/SPThemes.xsd");
这样就没问题了

bin_bin 2004-03-19
  • 打赏
  • 举报
回复

我基本可以确定不是xpath的问题
因为在没有名空间的情况下是可以运行的
八爪鱼-杭州 2004-03-19
  • 打赏
  • 举报
回复
还不行吗,试试这个
string xpath="/Templates";
xd.DocumentElement.SelectNodes(xpath);
showtimenow 2004-03-19
  • 打赏
  • 举报
回复
foo.Count为0,说明没有匹配的节点,当然没有用。
刚才贴的程序是有点问题,等一下,我在调试一下
bin_bin 2004-03-19
  • 打赏
  • 举报
回复
to CommanSource(CLR)
foo.Count为0啊
遍历有用吗?
bin_bin 2004-03-19
  • 打赏
  • 举报
回复
谢谢,诸位的讨论
可是我的问题还没解决

to CommanSource(CLR)
我不认为我的XPath写的有什么问题

问题应该和
<SPThemes xmlns="http://tempuri.org/SPThemes.xsd">
有关

我把名空间去掉就可以得到期望的结果
可是这个名空间我不能去掉……
CommanSource 2004-03-19
  • 打赏
  • 举报
回复
foreach (XmlNode isbn in foo){
Console.WriteLine(isbn.Value);
}
CommanSource 2004-03-19
  • 打赏
  • 举报
回复
错了哈,SORRY!
System.Xml.XmlNodeList foo = root.SelectNodes (String.Format("//Templates//@TemplateID"),nsmgr);
这样就行了,呵呵!
CommanSource 2004-03-19
  • 打赏
  • 举报
回复
晕死,肯定不是?号撒,?是你要列出的属性类,你可以用*来选取所有节点!
bin_bin 2004-03-19
  • 打赏
  • 举报
回复
using System;

namespace ConsoleApplication1
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();
xmlDocument.Load("d:\\xmlfoo.XML");
System.Xml.XmlNamespaceManager nsmgr = new System.Xml.XmlNamespaceManager(xmlDocument.NameTable);
System.Xml.XmlElement root = xmlDocument.DocumentElement;
System.Xml.XmlNodeList foo = root.SelectNodes ("//Templates",nsmgr);
Console.WriteLine(foo.Count);
for(;;);
}
}
}

我期望的结果是2,它的输出是0,不是吗?
showtimenow 2004-03-19
  • 打赏
  • 举报
回复
我自己调试成功了阿,怎么你会不成功?

把这句去掉nsmgr.AddNamespace("","http://tempuri.org/SPThemes.xsd")

因为你上面的System.Xml.XmlNamespaceManager nsmgr = new System.Xml.XmlNamespaceManager(xmlDocument.NameTable);
已经关联了这个xml文件的命名空间

System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();
xmlDocument.Load("d:\\xmlfoo.XML");
System.Xml.XmlNamespaceManager nsmgr = new System.Xml.XmlNamespaceManager(xmlDocument.NameTable);
System.Xml.XmlElement root = xmlDocument.DocumentElement;
System.Xml.XmlNodeList foo = root.SelectNodes ("//Templates",nsmgr);
bin_bin 2004-03-19
  • 打赏
  • 举报
回复


在线等待中……
bin_bin 2004-03-19
  • 打赏
  • 举报
回复
不能的
"//Templates" 本身也是合法的xpath对吗

SelectNodes("/SPThemes/Templates[TemplateID='aftrnoon']")
----实际调试的代码差不多就是这个:)
八爪鱼-杭州 2004-03-19
  • 打赏
  • 举报
回复
那你不去掉使用上面的方法试试
bin_bin 2004-03-19
  • 打赏
  • 举报
回复
xml中的名空间去掉是可以的
问题是这个xml不是我写的
我确实是要根据条件来改这个xml
可是我不能改名空间:(

能在不改名空间的情况下做到查找这个xml文件吗?
加载更多回复(11)

111,097

社区成员

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

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

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