我正在尝试从转储中分析维基百科文章。文件zhwiki-latest-pages-articles.xml
是一个巨大的XML文件。我决定使用XMLStreamReader
来读取文件并导入数据库。
问题是XMLStreamReader无法识别某些StartElement
。我需要它来提取元素文本。例如像
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.8/" xmlns:xsi="http://ww
w.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/x
ml/export-0.8/ http://www.mediawiki.org/xml/export-0.8.xsd" version="0.8" xml:la
ng="zh">
<siteinfo>
<sitename>Wikipedia</sitename>
<base>http://zh.wikipedia.org/wiki/Wikipedia:%E9%A6%96%E9%A1%B5</base>
<generator>MediaWiki 1.23wmf12</generator>
<case>first-letter</case>
<namespaces>
<namespace key="-2" case="first-letter">Media</namespace>
<namespace key="-1" case="first-letter">Special</namespace>
<namespace key="0" case="first-letter" />
</namespaces>
</siteinfo>
<page>
<title>Wikipedia:Upload log</title>
<ns>4</ns>
<id>1</id>
<revision>
<id>15649431</id>
<parentid>11154293</parentid>
<timestamp>2011-02-05T03:58:02Z</timestamp>
<contributor>
<username>AT</username>
<id>248442</id>
</contributor>
<minor />
<comment>[[Wikipedia:Upload log]]已被解除保护: 已保護一段長時間</comment>
<text xml:space="preserve">...(some long text)</text>
<sha1>prk62t3ad743sf0ighsrje6vu30qx88</sha1>
<model>wikitext</model>
<format>text/x-wiki</format>
</revision>
</page>
</mediawiki>
siteinfo
和title
等元素无法以streamReader.next()
作为条件显示在streamReader.isStartElement()
中。
这是我的代码
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
InputStream in = new FileInputStream("zhwiki-latest-pages-articles.xml");
XMLStreamReader streamReader = inputFactory.createXMLStreamReader(in);
Set<String> namespaces = new HashSet<>();
int articles = 0;
String title = null;
String context;
Set<String> categories = new HashSet<>();
while (true) {
try {
streamReader.next();
} catch (Exception e) {
break;
}
String localName = null;
try {
localName = streamReader.getLocalName();
} catch (Exception e) {
}
if (streamReader.isStartElement()) {
System.out.println(localName);
}
}
System.out.println(articles + " articles");
这是输出
mediawiki
sitename
base
generator
case
namespaces
namespace
namespace
namespace
page
ns
id
revision
parentid
timestamp
contributor
id
minor
comment
text
sha1
model
format