0

背景: XamlReader.Load() を使用してファイルからクラスをロードし、それを操作してから、XamlWriter.Save() を使用してファイルに保存しています。元のファイルには null プロパティはありませんが、結果として保存されたファイルには、null であるかどうかに関係なくすべてのプロパティが含まれ、ファイルが肥大化します。したがって、実際にディスクに保存する前にそれらを削除したいと思います。

次の 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 に答える