我有这种格式的XML文档
<User 1>
<sub>text1</sub>
<sub>text2</sub>
</User 1>
<User 2>
<sub>text3</sub>
<sub>text4</sub>
</User 2>
<User 3>
<sub>text2</sub>
<sub>text3</sub>
</User 3>
<User 4>
<sub>text1</sub>
<sub>text4</sub>
</User 4>
此处所有用户节点都有子节点,其值为text1,text2等,具体取决于其要求。我想显示这些值,我该怎么做?我可以像这样创建XML并显示值吗?当我尝试它时说没有名称为“sub”的属性。
[编辑] 我有根元素,我之前没有提到过。 在您回答之前,我使用下面的代码从用户那里获取一个值
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("usermachine.xml"));
DropDownList2.DataTextField = "sub";
DropDownList2.DataValueField = "userid";
DropDownList2.DataSource = ds;
DropDownList2.DataBind();
如果我想在DropDownList
中显示特定用户的(子)内的一个或多个值,我该怎么办?
答案 0 :(得分:2)
您没有使用有效的XML
首先你需要有一个根节点,用户ID应该在这样的属性中
<Users>
<User id="1">
<sub>text1</sub>
<sub>text2</sub>
</User>
<User id="2">
<sub>text3</sub>
<sub>text4</sub>
</User>
<User id="3">
<sub>text2</sub>
<sub>text3</sub>
</User>
<User id="4">
<sub>text1</sub>
<sub>text4</sub>
</User>
</Users>
正确格式化XML后,您可以像这样查询
var doc = XDocument.Load(@"c:\temp\test.xml");
var user = doc.Descendants("User").Where(x=>x.Attribute("id").Value =="1")
.Select(x=>x.Value);
回答您添加的问题
沿着这些方向的某些内容会使其映射到下拉列表
var doc = XDocument.Load(@"c:\temp\test.xml");
var user = doc.Descendants("User").Select(x=>new {UserId = x.Attribute("id").Value, Sub=x.Element("sub").Value});
DropDownList1.DataSource = "user";
DropDownList1.DataTextField= "UserId";
DropDownList1.DataValueField = "Sub";
如果您希望每个用户的下拉列表中有多个项目,则每个子项都可以使用一个
var result = res.Descendants("sub")
.Select(x => new {UserId = x.Parent.Attribute("id").Value, Sub = x.Value});