如何在循环中添加具有相同名称的节点?

时间:2011-09-13 19:02:10

标签: c# xml

我正在尝试创建以下XML文件:

<Clientes>
  <Cliente>
    <Name>sfsdfsd</Name>
    <Phone>
    </Phone>
    <Matriculas>
      <Matricula>
        <Nr>567856786</Nr>
        <Marca>86786</Marca>
        <Modelo>8678678</Modelo>
      </Matricula>
      <Matricula>
        <Nr>u56u5u</Nr>
        <Marca>4564b5</Marca>
        <Modelo>b456b</Modelo>
      </Matricula>
    </Matriculas>
  </Cliente>
</Clientes>

我有几个客户存储在List中,每个客户可能有一个Matricula,存储在List中

我有以下代码:

foreach (Cliente c in cli)
{
    XmlNode xCliente = xDoc.CreateElement("Cliente");
    XmlNode xName = xDoc.CreateElement("Name");
    XmlNode xPhone = xDoc.CreateElement("Phone");
    XmlNode xMatriculas = xDoc.CreateElement("Matriculas");
    XmlNode xMatricula = xDoc.CreateElement("Matricula");
    XmlNode xNr = xDoc.CreateElement("Nr");
    XmlNode xMarca = xDoc.CreateElement("Marca");
    XmlNode xModelo = xDoc.CreateElement("Modelo");
    xName.InnerText = c.Name;
    xPhone.InnerText = c.Phone;
    xCliente.AppendChild(xName);
    xCliente.AppendChild(xPhone);
    foreach (Matricula m in c.matricula)
    {
        xNr.InnerText = m.nr;
        xMarca.InnerText = m.marca;
        xModelo.InnerText = m.modelo;
        xMatricula.AppendChild(xNr);
        xMatricula.AppendChild(xMarca);
        xMatricula.AppendChild(xModelo);
        xMatriculas.AppendChild(xMatricula);
    }
    xCliente.AppendChild(xMatriculas);
    xDoc.DocumentElement.AppendChild(xCliente);
}

我可以在根中添加几个Cliente,但只添加Matriculas中的最后一个Matricula。

1 个答案:

答案 0 :(得分:5)

移动

 XmlNode xMatricula = xDoc.CreateElement("Matricula");
 XmlNode xNr = xDoc.CreateElement("Nr");
 XmlNode xMarca = xDoc.CreateElement("Marca");
 XmlNode xModelo = xDoc.CreateElement("Modelo");

在内部for循环中。

您正在重复使用完全相同的节点,每次需要在文档中创建新节点时,都需要创建一个新节点。