I think the required result can be obtained using the
Where
extension method of
IEnumerable
of
XElement
, as shown below:
string xmlData = @"<?xml version=""1.0""?>
<TopNode>
<event uid=""{AS1}"">
<vertex Lat=""13.33"" Lon=""46.33""/>
<vertex Lat=""14.44"" Lon=""46.44""/>
<vertex Lat=""15.55"" Lon=""46.55""/>
<vertex Lat=""16.66"" Lon=""46.66""/>
</event>
<event uid=""{AS2}"">
<vertex Lat=""23.33"" Lon=""56.33""/>
<vertex Lat=""24.44"" Lon=""56.44""/>
<vertex Lat=""25.55"" Lon=""56.55""/>
<vertex Lat=""26.66"" Lon=""56.66""/>
</event>
<event uid=""{AS3}"">
<vertex Lat=""33.33"" Lon=""66.33""/>
<vertex Lat=""34.44"" Lon=""66.44""/>
<vertex Lat=""35.55"" Lon=""66.55""/>
<vertex Lat=""36.66"" Lon=""66.66""/>
</event>
<event uid=""{AS4}"">
<vertex Lat=""43.33"" Lon=""76.33""/>
<vertex Lat=""44.44"" Lon=""76.44""/>
<vertex Lat=""45.55"" Lon=""76.55""/>
<vertex Lat=""46.66"" Lon=""76.66""/>
</event>
</TopNode>";
XDocument xdoc = XDocument.Parse(xmlData);
var requiredAttValues = new string[] {"{AS2}","{AS4}"};
var requiredElements = xdoc.Root.Elements().Where (r =>
requiredAttValues.Contains(r.Attribute("uid").Value));
var partDoc =new XDocument (
new XDeclaration ("1.0", "utf-8", "no"));
var root = new XElement("TopNode");
root.Add(requiredElements);
partDoc.Add(root);
partDoc.Save(outFileName);
?>
//<TopNode>
// <event uid="{AS2}">
// <vertex Lat="23.33" Lon="56.33" />
// <vertex Lat="24.44" Lon="56.44" />
// <vertex Lat="25.55" Lon="56.55" />
// <vertex Lat="26.66" Lon="56.66" />
// </event>
// <event uid="{AS4}">
// <vertex Lat="43.33" Lon="76.33" />
// <vertex Lat="44.44" Lon="76.44" />
// <vertex Lat="45.55" Lon="76.55" />
// <vertex Lat="46.66" Lon="76.66" />
// </event>
//</TopNode>