0

背景:我正在通过 XamlReader.Load() 从文件中加载一个类,使用它,然后通过 XamlWriter.Save() 将其保存回文件。原始文件没有空属性,但生成的保存文件具有所有属性,无论它们是否为空,并且它会使文件膨胀。所以我想在实际保存到磁盘之前删除它们。

我有以下 xml 片段作为字符串。我需要删除所有具有“{assembly:Null}”作为值的属性。

<ElementMap ElementType="SegmentData" 
  Key="{assembly:Null}" 
  EntityPropertyMapping="SenderCode" 
  Name="Application Sender's Code" 
  ElementCode="GS02" 
  EdiDataType="AN" 
  EntityDataType="String" 
  MinLength="2" 
  MaxLength="15" 
  Position="0" 
  ElementIndex="2" 
  ValidateData="False" 
  Parent="{assembly:Null}" 
  IsRequired="True" 
  Note="{assembly:Null}" 
  Default="{assembly:Null}" 
  Example="{assembly:Null}" 
  ExcludeFromStringOutput="False" />

最终结果将是:

<ElementMap 
  ElementType="SegmentData" 
  EntityPropertyMapping="SenderCode" 
  Name="Application Sender's Code" 
  ElementCode="GS02" 
  EdiDataType="AN" 
  EntityDataType="String" 
  MinLength="2" 
  MaxLength="15" 
  Position="0" 
  ElementIndex="2" 
  ValidateData="False" 
  IsRequired="True" 
  ExcludeFromStringOutput="False" />

那么如何实现呢?

4

2 回答 2

3

您可以使用 LINQ to XML:

var elementMap = XElement.Load(path_to_xml); // or XElement.Parse(xml_string)
elementMap.Attributes().Where(a => (string)a == "{assembly:Null}").Remove();
elementMap.Save(path_to_xml);

Extensions.Remove()方法从父节点中删除每个匹配的属性。

于 2013-08-09T15:31:20.830 回答
1
XElement element = //get the XElement
element = new XElement(element.Name,
     element.Attributes.Where(a => (string)a != "{assembly:Null}")
     .Concat(element.Elements()).ToArray());
于 2013-08-09T15:33:21.780 回答