C# 从xml文件获取数据时出错
我的web文件夹中有C# 从xml文件获取数据时出错,c#,xml,linq,C#,Xml,Linq,我的web文件夹中有profile.xml文件: <?xml version="1.0" encoding="utf-8"?> <myXML> <RealName>Nguyen Van A</RealName> <Email>vyclarks@gmail.com</Email> <Phone>2165421</Phone> <Address>Ho Chi Minh</
profile.xml
文件:
<?xml version="1.0" encoding="utf-8"?>
<myXML>
<RealName>Nguyen Van A</RealName>
<Email>vyclarks@gmail.com</Email>
<Phone>2165421</Phone>
<Address>Ho Chi Minh</Address>
<Link1>dtvt</Link1>
<Link2></Link2>
<Link3></Link3>
</myXML>
阮文阿
vyclarks@gmail.com
2165421
胡志明
dtvt
根据建议,我通过以下代码从该文件中获取数据:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Linq;
public class profile
{
public string realname { get; set; }
public string email { get; set; }
public string phone { get; set; }
public string address { get; set; }
public string link1 { get; set; }
public string link2 { get; set; }
public string link3 { get; set; }
}
public void getProfile()
{
string path = this.Server.MapPath("~/Lecturer/");
string targetPath = path + @"\"+username+"\\profile.xml";
bool isExists = System.IO.Directory.Exists(targetPath);
if(isExists)
{
List<profile> profiles = (
from e in XDocument.Load(targetPath)
.Root.Element("myXML")
select new profile
{
realname = (string) e.Element("RealName"),
email = (string) e.Element("Email"),
phone = (string) e.Element("Phone"),
address = (string) e.Element("Address"),
link1 = (string) e.Element("Link1"),
link2 = (string) e.Element("Link2"),
link3 = (string) e.Element("Link3")
}
).ToList();
}
...//code to get list value...
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
使用System.Xml.Linq;
公共班级简介
{
公共字符串实名{get;set;}
公共字符串电子邮件{get;set;}
公用字符串电话{get;set;}
公共字符串地址{get;set;}
公共字符串link1{get;set;}
公共字符串link2{get;set;}
公共字符串link3{get;set;}
}
public void getProfile()
{
字符串路径=this.Server.MapPath(“~/讲师/”);
字符串targetPath=path+@“\”+用户名+“\\profile.xml”;
bool isExists=System.IO.Directory.Exists(targetPath);
如果(存在)
{
列表配置文件=(
从XDocument.Load(targetPath)中的e开始
.Root.Element(“myXML”)
选择新配置文件
{
realname=(字符串)e.Element(“realname”),
email=(字符串)e.Element(“email”),
phone=(字符串)e.Element(“phone”),
地址=(字符串)e.Element(“地址”),
link1=(字符串)e.Element(“link1”),
link2=(字符串)e.Element(“link2”),
link3=(字符串)e.Element(“link3”)
}
).ToList();
}
…//获取列表值的代码。。。
}
但它有一个错误:无法解析符号“select”
有没有更好的方法从
profile.xml
文件中获取数据?您的from e in…语句中有一个错误。
XDocument.Load(targetPath).Root.Element(“myXML”)只为您返回一个XML元素。所以不能对单个对象执行linq查询(不要与只包含一个对象的集合混合)
要使其正常工作,您需要将元素方法更改为元素:
from e in XDocument.Load(targetPath).Root.Elements("myXML")
select new profile
{
realname = (string) e.Element("RealName"),
email = (string) e.Element("Email"),
phone = (string) e.Element("Phone"),
address = (string) e.Element("Address"),
link1 = (string) e.Element("Link1"),
link2 = (string) e.Element("Link2"),
link3 = (string) e.Element("Link3")
}
更新
如果XML文件中只有一个myXML节点(因为在您的示例中它是根节点),那么您根本不需要linq查询。尝试用下一种方法从XML中读取数据:
var prof = XDocument.Load(targetPath).Root;
var p = new profile()
{
realname = prof.Element("RealName").Value,
email = prof.Element("Email").Value,
phone = prof.Element("Phone").Value,
address = prof.Element("Address").Value,
link1 = prof.Element("Link1").Value,
link2 = prof.Element("Link2").Value,
link3 = prof.Element("Link3").Value
}
我已经用您的示例中的XML对它进行了测试,但是当我构建profiles.count=0时,我想知道该代码是否不适合我的XML语法。帮助???请查看更新的答案,我已经用您的XML测试了第二个代码段。我第一次错过了将所有内容存储在一个名为myXML的根元素中。我认为您可能在一个XML文件中存储了多个概要文件。