【发布时间】:2020-06-24 22:49:21
【问题描述】:
所以,我是 XML 的新手,我正在尝试创建一些将从 xml 文件中提取的代码列表。
'ParentId' == -1 的每个节点都有一些相关的节点。每个节点都有四个具有不同值的单元格,我需要将它们放入“Campo”类中。这样,每个字段都会生成一个列表,我用它来填充一些控件。
我正在尝试使用 Linq 解决这个问题,到目前为止,我已经弄清楚了如何获得继任者和前任者字段。问题是我无法在“Campo”类的对应参数上分别获取四个单元格。该代码仅返回所有 Class 参数的第一个元素(“Cell”)。
我做错了什么?谢谢。
这是 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
【问题讨论】:
标签: c# xml linq linq-to-xml