C# 如何从xml中删除空属性?
背景:我正在通过XamlReader.Load()从文件加载一个类,处理它,然后通过XamlWriter.Save()将其保存回文件。原始文件没有null属性,但结果保存的文件具有所有属性,无论这些属性是否为null,并且会使文件膨胀。所以我想在实际保存到磁盘之前删除它们 我将以下xml片段作为字符串。我需要删除所有以“{assembly:Null}”作为值的属性C# 如何从xml中删除空属性?,c#,xml,linq,C#,Xml,Linq,背景:我正在通过XamlReader.Load()从文件加载一个类,处理它,然后通过XamlWriter.Save()将其保存回文件。原始文件没有null属性,但结果保存的文件具有所有属性,无论这些属性是否为null,并且会使文件膨胀。所以我想在实际保存到磁盘之前删除它们 我将以下xml片段作为字符串。我需要删除所有以“{assembly:Null}”作为值的属性 <ElementMap ElementType="SegmentData" Key="{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" />
那么如何实现这一点呢?您可以使用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);
方法从父节点删除所有匹配的属性。您可以使用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);
XElement element = //get the XElement
element = new XElement(element.Name,
element.Attributes.Where(a => (string)a != "{assembly:Null}")
.Concat(element.Elements()).ToArray());
方法从父节点移除每个匹配的属性
XElement element = //get the XElement
element = new XElement(element.Name,
element.Attributes.Where(a => (string)a != "{assembly:Null}")
.Concat(element.Elements()).ToArray());