查询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文档

您没有使用有效的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});