很奇怪的,气了我一天的问题:用.net framework 搜索XML文件内容出错
用XML文件作为数据库代替database,在为某一xml文件写Select()方法时,用到了XPath查询语句比如"/Job/JobTable",但是即使XML文件中有对应的数据记录,就是死活读不出来,而且也没有抛出任何异常。我的方法如下
public DataSet Select2(string xmlQuery) {
ds.EnforceConstraints = false;
XmlElement root = doc.DocumentElement;
XmlNodeList nlst = root.SelectNodes(xmlQuery);//这里用到了"/Job/JobTable"
Job job = new Job();//Job 是 typed dataset
for (int i = 0; i <= nlst.Count - 1; i++) {
DataRow r = job.JobTable.NewRow();
DataRow r1 = doc.GetRowFromElement((XmlElement)nlst[0]);
r["job_name"] = r1["job_name"];
r["state"] = r1["state"];
r["user_id"] = r1["user_id"];
r["time"] = r1["time"];
r["mail_total"] = r1["mail_total"];
r["subject"] = r1["subject"];
r["address_from"] = r1["address_from"];
r["mail_content"] = r1["mail_content"];
r["mail_signature"] = r1["mail_signature"];
r["attachment"] = r1["attachment"];
job.JobTable.Rows.Add(r);
}
return job;
}
我的数据文件是
<?xml version="1.0" standalone="yes"?>
<Job xmlns="http://tempuri.org/Job.xsd">
<JobTable>
<job_id>1</job_id>
<job_name>The first job!</job_name>
<state>1</state>
<user_id>1</user_id>
<time>2007-02-15T10:11:12.2128948+09:00</time>
<mail_total>1</mail_total>
<subject>The first mail!!</subject>
<address_from>wakai@bug.co.jp</address_from>
<mail_content>Hello!, this is the first mail sent by me!</mail_content>
<mail_signature>若井</mail_signature>
<attachment>1.jpg</attachment>
</JobTable>
<MailAddressTable>
<job_id>1</job_id>
<email>sato@f1.com</email>
<person_name>佐藤琢磨</person_name>
<corp>HONDA</corp>
<post>選手</post>
<is_sent>0</is_sent>
</MailAddressTable>
</Job>
不知道问题到底出在哪儿?因为之前在其他的一个程序里用"/Job/JobTable"还好好的,所以我不怀疑是XPath查询语句的错误,进而猜想至少是dataset 以及XML两者之一有问题,但是死活找不到问题所在,希望有了解的人给俺支一招,或者干脆有没有XPath之外的方法可以查询xml数据 --------------------编程问答-------------------- 应该是你的:"/Job/JobTable" 改成这个吧:Job/JobTable
你这里的XML结构Job都是根结点了你为什么还在前面加"/"
XmlNodeList选取的是多个同样的XMLNODE: <JobTable/><JobTable/><JobTable/>...
如果你的Xml与你的Database中的Table结构一样的话其实你可以使用row.AppendRow(dataRow),这样的话你就不用写每一个Column了。
--------------------编程问答-------------------- 试试
DataSet.ReadXml("xxx.doc");
然后使用DataView的RowFilter来筛选 --------------------编程问答-------------------- 关于<Job xmlns="http://tempuri.org/Job.xsd">
是不是必须要在Xpath语句中指定namespace?
补充:.NET技术 , C#