Если бы я делал это на Java, я бы использовал javax.xml.stream.XMLEventReader и javax.xml.stream.XMLEventWriter.
В каком-то псевдокоде предположим, что тег <article>
ограничивает каждую статью в Википедии, что вам не нужно беспокоиться о вложенных тегах <article>
, и у вас есть функция openNewWriter()
для открытия нового XMLEventWriter
, который записывает в новый файл с подходящим именем. для этой статьи.
Тогда мой код будет выглядеть примерно так:
XMLEventReader r = // an XMLEventReader for the original wikipedia dump
XMLEventWriter w = null;
bool isInsideArticle = false;
while (r.hasNext()){
XMLEvent e = r.nextEvent();
if (e.isStartElement() &&
e.asStartElement().getName().getLocalPart().equals("article")){
w = openNewWriter();
// write the stuff that belongs outside the <article> tag
// by synthesizing XMLEvents and using w.add() to add them
w.add(e);
isInsideArticle = true;
} else if (e.isEndElement() &&
e.asEndElement().getName().getLocalPart().equals("article")) {
w.add(e);
// write the stuff that belongs outside the <article> tag
// by synthesizing XMLEvents and using w.add() to add them
isInsideArticle = false;
w.close();
} else if (isInsideArticle) {
w.add(e);
} else {
// this tag gets dropped on the floor because it's not inside any article
}
}
Теперь все, что вам нужно сделать, это найти потоковые XML-классы в .NET. Я думаю, что это system.xml.XMLReader и system.xml.XMLWriter, но мой опыт не t в .NET, и из документации я не могу сказать, будут ли они работать точно так же, как версия Java, которую я вам только что дал.
(Моя цель здесь больше показать вам, как подойти к проблеме, чем назвать вам имена классов, которые вам нужны.)
person
Ken Bloom
schedule
01.02.2011