Question

I need to extract only field related elements from below xml

<MyDataset>
  <Data>
    <Name>ABC</Name>
    <Date>2014-05-02T06:52:56.4931892+05:30</Date>
    <Source>Source1</Source>
    <Field1>10</Field1>
    <Field2>11</Field2>
  </Data>
  <Data>
    <Name>CDE</Name>
    <Date>2014-05-02T06:52:56.4931892+05:30</Date>
    <Source>Source2</Source>
    <Field1>4</Field1>
    <Field2>5</Field2>
  </Data>
  <Data>
    <Name>FGH</Name>
    <Date>2014-05-02T06:52:56.4931892+05:30</Date>
    <Source>Source1</Source>
    <Field1 />
    <Field2 />
  </Data>
</MyDataset>

I have the below code

XElement xelem = XElement.Load(@"D:\Nirvana\NirvanaCode\Dev\Prana\myXML.xml");
IEnumerable<XElement> symbols = xelem.Elements();
foreach (XElement symbol in symbols)
{
    //Here I need to add have the following xml How can I extract it from symbol
    // <Data>
    //     <Field1>10</Field1>
    //     <Field2>11</Field2>
    // </Data>
}
Was it helpful?

Solution

var elementNamesToKeep = new[] { "Field1", "Field2" };
foreach (var symbol in xelem.Elements())
{
   var stripped = new XElement(
      symbol.Name,
      symbol.Elements().Where(e => elementNamesToKeep.Contains(e.Name.ToString())));
}

OTHER TIPS

var path_to_xml = @"D:\Nirvana\NirvanaCode\Dev\Prana\myXML.xml";
var dataset = XElement.Load(path_to_xml);

foreach (var data in dataset.Elements())
{
    data.Elements().Where(e => !e.Name.LocalName.StartsWith("Field")).Remove();
    string xml = data.ToString(); // use this string or data XElement
}

This will produce following three xml strings:

  <Data>
    <Field1>10</Field1>
    <Field2>11</Field2>
  </Data>

  <Data>
    <Field1>4</Field1>
    <Field2>5</Field2>
  </Data>

  <Data>
    <Field1 />
    <Field2 />
  </Data>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top