Получить выбранный элемент с помощью выпадающего списка из файла XML - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть выпадающий список, заполненный данными XML.Член оценки из файла XML.Я хотел бы прочитать выбранный элемент из XML-файла.

var xmlDocument = XDocument.Load(@"data\tools.xml");
    var ToolData = from r in xmlDocument.Descendants("ToolClass").Where
                   (r => (string)r.Attribute("ToolID") == ToolListComboBox.SelectedValue.ToString())
                   select new
                   {
                       Tooldia = r.Element("ToolDia").Value,
                       Tooltooth = r.Element("ToolTooth").Value,
                       Toolfeed= r.Element("ToolFeedPerTooth").Value,
                       Toolcut = r.Element("ToolCuttingSpeed").Value                               
                   };
    foreach(var r in ToolData)
    {
        CalcToolDia.Text = r.Tooldia.ToString();
    }

Я пытался с этим кодом, но не работает.

РЕДАКТИРОВАТЬ: У меня есть этот файл XMl:

    <?xml version="1.0"?>
<ArrayOfToolClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ToolClass>
    <ToolID>1</ToolID>
    <ToolName>Multiflute Endmill</ToolName>
    <ToolDia>8</ToolDia>
    <ToolTooth>4</ToolTooth>
    <ToolApmxs>32</ToolApmxs>
    <ToolCuttingSpeed>150</ToolCuttingSpeed>
    <ToolFeedPerTooth>0.04</ToolFeedPerTooth>
    <ToolAe>8</ToolAe>
    <ToolAp>4</ToolAp>
    <ToolManufacturer>SECO</ToolManufacturer>
    <ToolSerial>DKFLJDSKJ</ToolSerial>
  </ToolClass>
  <ToolClass>
    <ToolID>2</ToolID>
    <ToolName>Multiflute Endmill</ToolName>
    <ToolDia>4</ToolDia>
    <ToolTooth>4</ToolTooth>
    <ToolApmxs>25</ToolApmxs>
    <ToolCuttingSpeed>235</ToolCuttingSpeed>
    <ToolFeedPerTooth>0.03</ToolFeedPerTooth>
    <ToolAe>4</ToolAe>
    <ToolAp>0.4</ToolAp>
    <ToolManufacturer>SECO</ToolManufacturer>
    <ToolSerial>DJFKLSL</ToolSerial>
  </ToolClass>
</ArrayOfToolClass>

В комбинированном ящике есть это:

var xmlDocument = XDocument.Load(@"data\tools.xml");
            var toolist = xmlDocument.Descendants("ToolClass")
                                                  .Select(tc => new
            {
            Display = tc.Element("ToolDia").Value + "x" + tc.Element("ToolApmxs").Value + " mm - " + tc.Element("ToolName").Value,
            Value = tc.Element("ToolID").Value
             }).ToList();

            ToolListComboBox.DisplayMember = "Display";
            ToolListComboBox.ValueMember = "Value";
            ToolListComboBox.DataSource = toolist;

Когда я выбираю элемент в комбинированном ящике, она дает мне ToolID.После этого я хотел бы прочитать elemnts из XML-файла, где ToolID - это выбранный в выпадающем списке ToolID.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Я думаю, что ошибка в том, что вы используете атрибут вместо элемента.Измените его на

(string)r.Element("ToolID").Value

Вот так это будет выглядеть

var xmlDocument = XDocument.Load(@"data\tools.xml");
    var ToolData = from r in xmlDocument.Descendants("ToolClass").Where
                   (r => (string)r.Element("ToolID").Value == ToolListComboBox.SelectedValue.ToString())
                   select new
                   {
                       Tooldia = r.Element("ToolDia").Value,
                       Tooltooth = r.Element("ToolTooth").Value,
                       Toolfeed= r.Element("ToolFeedPerTooth").Value,
                       Toolcut = r.Element("ToolCuttingSpeed").Value                               
                   };
    foreach(var r in ToolData)
    {
        CalcToolDia.Text = r.Tooldia.ToString();
    }
0 голосов
/ 26 сентября 2018

Если я правильно понимаю, у вас есть значение элемента, и вы хотите получить весь элемент, предоставляющий это значение - возможно, попробуйте ниже.

To modify my sample provided to align to your example:

XElement root = XElement.Load(@"data\tools.xml");  
IEnumerable<XElement> address =  
    from el in root.Elements("ToolClass")  
    where (string)el.Attribute("ToolID") ==ToolListComboBox.SelectedValue.ToString()  
    select el;  
foreach (XElement el in address)  
    Console.WriteLine(el.Tooldia.ToString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...