【问题标题】:Delete Duplicated Node From XML从 XML 中删除重复的节点
【发布时间】:2018-06-22 20:36:20
【问题描述】:

我有一个表示发票的复杂 XML。

我需要使用 .NET Core 和XmlSerializer 生成如下 XML 结构:

<DetalleServicio>
  <LineaDetalle>
    ALL MY VALUES HERE
  </LineaDetalle>
  <LineaDetalle>
    MY VALUES HERE
  </LineaDetalle>
</DetalleServicio>

如您所见,DetalleServicio 可以包含很多 LineaDetalle 子代。

我正在尝试使用一些类来完成这项工作,所以我有:

public class DetalleServicio
{
  public List<LineaDetalle> LineaDetalle { get; set; }
}

public class LineaDetalle
{
   public int NumeroLinea { get; set; }
   public CodigoProducto[] Codigo { get; set; }
   public decimal Cantidad { get; set; }
   public string UnidadMedida { get; set; }
   public string UnidadMedidaComercial { get; set; }
   public string Detalle { get; set; }
   public decimal PrecioUnitario { get; set; }
   public decimal MontoTotal { get; set; }
   public decimal MontoDescuento { get; set; }
   public string NaturalezaDescuento { get; set; }
   public decimal SubTotal { get; set; }
   public Impuesto Impuesto { get; set; }
   public decimal MontoTotalLinea { get; set; }
}

Finally I'm doing something like this

DetalleServicio = new DetalleServicio()
{
  LineaDetalle = new List<LineaDetalle>()
  {
    new LineaDetalle()
    {
    },
    new LineaDetalle()
    {
    }
   }
 }

最后我们使用XmlSerializer 生成我们的XML,但问题是XmlSerializerLineaDetalle 写入父级,LineaDetalle 写入子级,例如:

<DetalleServicio>
  <LineaDetalle>
    <LineaDetalle>
      ALL MY VALUES HERE
    </LineaDetalle>
    <LineaDetalle>
      MY VALUES HERE
    </LineaDetalle>
  </LineaDetalle>
</DetalleServicio>

我该如何解决这个问题?我尝试使用XmlDocument 删除父节点&lt;LineaDetalle&gt;,但它会引发“cs0 ...”错误。

【问题讨论】:

标签: xml .net-core


【解决方案1】:

我找到了答案:

因为我正在使用

public List<LineaDetalle> LineaDetalle { get; set; }

LineaDetalle = new List<LineaDetalle>()
 {
    new LineaDetalle()
    {}
    new LineaDetalle()
    {}
}

当使用 xmlserialize 时,它​​会导致有两个层次结构来表示 List&lt;LineaDetalle&gt; 集合。你有&lt;LineaDetalle&gt; 标签,然后你有一个&lt;LineaDetalle&gt; 为集合中的每个细节标签

因此,要使用 XmlSerializer 消除标记,只需使用 XmlElementAttribute 更新 LineaDetalle 成员,该属性指定要为每个项目使用的名称

例如

 [XmlElement("LineaDetalle")]
 public List<LineaDetalle> LineaDetalle { get; set; }

现在实例正在被序列化,没有额外的标签

【讨论】:

    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    相关资源
    最近更新 更多