-2

我有一个这种格式的 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我该怎么办?

4

1 回答 1

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});
于 2013-06-14T06:53:16.887 回答