1

嗨,我有一个问题要 linq to xml ...

我有一个带有 Title 值的 xml 文件:

我的xml:

<?xml version="1.0" encoding="utf-8"?>

<Titles>
  <values id="de">
    <value value="Herr" display="Herr"></value>
    <value value="Frau" display="Frau"></value>
  </values>
  <values id="cs">
    <value value="Herr" display="Pan"></value>
    <value value="Frau" display="Paní"></value>
  </values>
  <values id="en">
    <value value="Herr" display="Mr."></value>
    <value value="Frau" display="Mrs."></value>
  </values>
  <values id="es">
    <value value="Herr" display="Sr."></value>
    <value value="Frau" display="Sra."></value>
  </values>
  <values id="zh">
    <value value="Herr" display="先生"></value>
    <value value="Frau" display="女士"></value>
  </values>
</Titles>

我有一个下拉列表:

<td><asp:DropDownList ID="drp_GuestListViewAddDialog_GuestTitle" runat="server"></asp:DropDownList></td>

这是我的 C# 代码:

 XDocument x = XDocument.Load(Server.MapPath(@"~\App_Data\DropDown\Title.xml"));

                string data = (from item in x.Elements("Titles").Elements("values") where item.Attribute("id").Value == "de" select item.Attribute("display").Value).First();

更新:

例如,如果我想要 id = "de" 我想要这个

<values id="de">
    <value value="Herr" display="Herr"></value>
    <value value="Frau" display="Frau"></value>
  </values>
4

2 回答 2

1
var results = doc.Descendants("values")
         .Where(e => (string)e.Attribute("id") == "zh")
         .SelectMany(e => e.Elements("value"))
         .Select(v => new { Value = v.Attribute("value").Value, Text = v.Attribute("display").Value })
         .ToList();

然后绑定它:

 drp_GuestListViewAddDialog_GuestTitle.Enabled = true;
 drp_GuestListViewAddDialog_GuestTitle.DataSource = result;
 drp_GuestListViewAddDialog_GuestTitle.DataBind();

抱歉,我无法检查它是否可以编译,我正在这里做准备。

于 2013-10-29T13:43:22.717 回答
1

编辑:这有效...

var x = XDocument.Load(@"~\App_Data\DropDown\Title.xml");
var list = x.Descendants("values")
    .Where(el => el.Attribute("id").Value == "de")
    .Descendants("value")
    .Select(el => new
    {
        value = el.Attribute("value").Value,
        display = el.Attribute("display").Value
    )
    .ToList();

drp_GuestListViewAddDialog_GuestTitle.DataValueField = "value";
drp_GuestListViewAddDialog_GuestTitle.DataTextField = "display";
drp_GuestListViewAddDialog_GuestTitle.DataSource = list;
drp_GuestListViewAddDialog_GuestTitle.DataBind();
于 2013-10-29T13:28:46.793 回答