Итак, я новичок ie в XML, и я пытаюсь создать несколько списков кодов, которые будут извлечены из файла xml.
Каждый узел с 'ParentId '== -1 имеет несколько связанных с ним узлов. И у каждого узла есть четыре ячейки с разными значениями, которые мне нужно поместить в класс «Кампо». Таким образом, каждое поле генерирует список, который я использую для заполнения некоторых элементов управления.
Я пытаюсь решить это с помощью Linq, и до сих пор я выяснил, как получить поля-предшественники и предшественники. Проблема в том, что я не могу получить четыре ячейки отдельно, по соответствующему параметру класса "Кампо". Код возвращает только первый элемент («Ячейка») для всех параметров класса.
Что я делаю не так? Спасибо.
Это структура xml:
<TreeList>
<Nodes>
<Node ParentId="-1" Id="0">
<NodeData>
<Cell xsi:type="xsd:string">OBRA</Cell>
<Cell xsi:type="xsd:string">Obra/Cliente</Cell>
<Cell xsi:type="xsd:string">Lista de Itens</Cell>
<Cell xsi:type="xsd:string">4</Cell>
</NodeData>
</Node>
<Node ParentId="0" Id="1">
<NodeData>
<Cell xsi:type="xsd:string">PMG</Cell>
<Cell xsi:type="xsd:string">Presa Monte Grande</Cell>
<Cell xsi:type="xsd:string">Código Fixo</Cell>
<Cell xsi:type="xsd:string">4</Cell>
</NodeData>
</Node>
</Nodes>
</Treelist>
Это то, что я сделал до сих пор:
string caminho = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string caminhoCompleto = caminho + @"\OBRA.xml";
XDocument xml = XDocument.Load(caminhoCompleto);
List<Campo> codigos = (from codigo in xml.Root.Elements("Nodes").Elements("Node")
from node in codigo.Descendants("NodeData")
where (int)codigo.Attribute("ParentId") == -1
select new Campo
{
Codigo = (string)node.Element("Cell").Value,
Descricao = (string)node.Element("Cell").Value,
TipoCampo = (int)node.Element("Cell").Value, //This line return error
NumCarac = (int)node.Element("Cell").Value,
}
).ToList();
foreach (Campo cp in codigos)
{
Console.WriteLine("Field: {0}", cp.Codigo);
Console.WriteLine("Field: {0}", cp.Descricao);
Console.WriteLine("Field: {0}", cp.TipoCampo);
Console.WriteLine("Field: {0}", cp.NumCarac);
}
Console.ReadLine();
}
}
class Campo
{
public string Codigo { get; set; }
public string Descricao { get; set; }
public int TipoCampo { get; set; }
public int NumCarac { get; set; }
public List<Campo> Itens;
}
Это результат, который у меня сейчас есть
Field: OBRA
Field: OBRA
Field: OBRA
Field: OBRA
Результат, который я ищу
Field: OBRA
Field: Obra/Cliente
Field: 3
Field: 4