Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I am trying to split a XML file to multiple small xml files in C#.net and am trying to get the best possible approach to this. Any help on this will be great... Sample example on what I am trying to do...

Source XML document

<?xml version="1.0" standalone="yes"?>
<DATABASE>
  <DOC>
    <DOCID>8510188</DOCID>
    <ISSUE>2010</ISSUE>
    <CAT>Literature and Art</CAT>
    <TITLE>Test</TITLE>
    <TEXT>Test</TEXT>
  </DOC>
  <DOC>
    <DOCID>1510179</DOCID>
    <ISSUE>2012</ISSUE>
    <CAT>Miscellaneous</CAT>
    <TITLE>Test</TITLE>
    <TEXT>Test</TEXT>
  </DOC>
</DATABASE>

Should split to two xml documents as below

1)

<?xml version="1.0" standalone="yes"?>
<DATABASE>
  <DOC>
   <DOCID>8510188</DOCID>
   <ISSUE>2010</ISSUE>
   <CAT>Literature and Art</CAT>
   <TITLE>Test</TITLE>
   <TEXT>Test</TEXT>
  </DOC>
</DATABASE>

2)

<?xml version="1.0" standalone="yes"?>
<DATABASE>
  <DOC>
    <DOCID>1510179</DOCID>
    <ISSUE>2012</ISSUE>
    <CAT>Miscellaneous</CAT>
    <TITLE>Test</TITLE>
    <TEXT>Test</TEXT>
  </DOC>
</DATABASE>
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
371 views
Welcome To Ask or Share your Answers For Others

1 Answer

Well, I'd use LINQ to XML:

XDocument doc = XDocument.Load("test.xml");
var newDocs = doc.Descendants("DOC")
                 .Select(d => new XDocument(new XElement("DATABASE", d)));
foreach (var newDoc in newDocs)
{
    newDoc.Save(/* work out filename here */);
}

(I'm assuming you want to save them. Maybe you don't need to. I've tested this just by printing them out to the console instead.)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share

548k questions

547k answers

4 comments

86.3k users

...