查询XML文档
本文关键字:文档 XML 查询 | 更新日期: 2023-09-27 18:18:25
我有一个这种格式的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
中显示一个或多个特定用户的值(子),我应该怎么做?
您没有使用有效的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});