当前位置:编程学习 > C#/ASP.NET >>

很奇怪的,气了我一天的问题:用.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#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,