-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 を作成して値を表示することはできますか? 私が試したところ、「サブ」という名前のプロパティは存在しないと言われました。

[編集] ルート要素がありますが、前に言及していませんでした。あなたの答えの前に、私は以下のコードを使用してユーザーから1つの値を取得していました

    DataSet ds = new DataSet();
    ds.ReadXml(Server.MapPath("usermachine.xml"));
    DropDownList2.DataTextField = "sub";
    DropDownList2.DataValueField = "userid";
    DropDownList2.DataSource = ds;
    DropDownList2.DataBind();

特定のユーザーの内部 (サブ) に 1 つまたは複数の値を表示したい場合、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";

各ユーザーのドロップダウンに複数のアイテムが必要な場合は、サブごとに 1 つ、これを使用できます

var result = res.Descendants("sub")
                .Select(x => new {UserId = x.Parent.Attribute("id").Value, Sub = x.Value});
于 2013-06-14T06:53:16.887 に答える