C# 循环遍历XElement并删除一些标记 请考虑此代码: public static XElement ToXElement<T>(this object obj,List<string> JustThisProperties) { using (var memoryStream = new MemoryStream()) { using (TextWriter streamWriter = new StreamWriter(memoryStream)) { var xmlSerializer = new XmlSerializer(typeof(T)); xmlSerializer.Serialize(streamWriter, obj); var xml = XElement.Parse(Encoding.UTF8.GetString(memoryStream.ToArray())); xml.Attributes().Where(a => a.IsNamespaceDeclaration).Remove(); foreach (var item in xml.Elements()) { if (JustThisProperties.Where(o=>o == item.Name.ToString()).Any() == false) { xml.Elements(item.Name.ToString()).Remove(); } } return xml; } } } 公共静态元素(此对象对象对象,列出JustThisProperties) { 使用(var memoryStream=new memoryStream()) { 使用(TextWriter streamWriter=新streamWriter(memoryStream)) { var xmlSerializer=新的xmlSerializer(typeof(T)); Serialize(streamWriter,obj); var xml=XElement.Parse(Encoding.UTF8.GetString(memoryStream.ToArray()); 其中(a=>a.IsNamespaceDeclaration).Remove(); foreach(xml.Elements()中的var项) { if(JustThisProperties.Where(o=>o==item.Name.ToString()).Any()==false) { 元素(item.Name.ToString()).Remove(); } } 返回xml; } } }

C# 循环遍历XElement并删除一些标记 请考虑此代码: public static XElement ToXElement<T>(this object obj,List<string> JustThisProperties) { using (var memoryStream = new MemoryStream()) { using (TextWriter streamWriter = new StreamWriter(memoryStream)) { var xmlSerializer = new XmlSerializer(typeof(T)); xmlSerializer.Serialize(streamWriter, obj); var xml = XElement.Parse(Encoding.UTF8.GetString(memoryStream.ToArray())); xml.Attributes().Where(a => a.IsNamespaceDeclaration).Remove(); foreach (var item in xml.Elements()) { if (JustThisProperties.Where(o=>o == item.Name.ToString()).Any() == false) { xml.Elements(item.Name.ToString()).Remove(); } } return xml; } } } 公共静态元素(此对象对象对象,列出JustThisProperties) { 使用(var memoryStream=new memoryStream()) { 使用(TextWriter streamWriter=新streamWriter(memoryStream)) { var xmlSerializer=新的xmlSerializer(typeof(T)); Serialize(streamWriter,obj); var xml=XElement.Parse(Encoding.UTF8.GetString(memoryStream.ToArray()); 其中(a=>a.IsNamespaceDeclaration).Remove(); foreach(xml.Elements()中的var项) { if(JustThisProperties.Where(o=>o==item.Name.ToString()).Any()==false) { 元素(item.Name.ToString()).Remove(); } } 返回xml; } } },c#,xml,c#-4.0,linq-to-xml,xelement,C#,Xml,C# 4.0,Linq To Xml,Xelement,和XML: <Log> <tbl> <ID>21</ID> <MasterID>3</MasterID> <C_2>1</C_2> <C_3>1</C_3> <C_4>1</C_4> <C_5>2000</C_5> <C_

和XML:

<Log>
   <tbl>
       <ID>21</ID>
       <MasterID>3</MasterID>
       <C_2>1</C_2>
       <C_3>1</C_3>
       <C_4>1</C_4>
       <C_5>2000</C_5>
       <C_6>2</C_6>
       <C_7>2</C_7>
       <C_8>2</C_8>
       <C_9>2</C_9>
       <C_10>2</C_10>
    </tb>
</Log>

21
3.
1.
1.
1.
2000
2.
2.
2.
2.
2.
我只想序列化一些属性。例如,当上面生成
XML
时,我想删除除
{C_2,C_9,C_10}
之外的所有标记。问题是当它删除
C_2
时,因为
XML
已被更改,所以它没有继续执行每个
foreach
并将其中断。如何从
XElement
中删除一些标记

谢谢

您可以使用:

(您可能希望将
JustThisProperties
设置为
IEnumerable
,这将使您摆脱
ToString()
调用。)

xml.Elements()
   .Where(item => !JustThisProperties.Contains(item.Name.ToString()))
   .Remove();