大きな XML ファイルの一部を非整列化したいと考えています。これにはすでに解決策がありますが、私自身の実装のために改善したいと考えています。
次のコードを見てください: ( source )
public static void main(String[] args) throws Exception {
XMLInputFactory xif = XMLInputFactory.newFactory();
StreamSource xml = new StreamSource("input.xml");
XMLStreamReader xsr = xif.createXMLStreamReader(xml);
xsr.nextTag();
while(!xsr.getLocalName().equals("VersionList")&&xsr.getElementText().equals("1.81")) {
xsr.nextTag();
}
ノードの input.xml (以下に示す) をアンマーシャリングしたい: versionNumber="1.81"
現在のコードでは、XMLStreamReader は最初にノード versionNumber="1.80" をチェックし、次に versionNumber のすべてのサブノードをチェックしてから、再び node: versionNumber="1.81" に移動し、そこで終了条件を満たします。 while ループ。
ノードの versionNumber のみを確認したいので、そのサブノードを反復する必要はなく、大きな xml ファイルの場合、バージョン 1.80 のすべてのサブノードを反復するには長い時間がかかります。ルート ノード (versionNumber) のみをチェックしたいのですが、最初のルート ノード (versionNumber=1.80) が一致しない場合、XMLStreamReader は次のルート ノード ((versionNumber=1.81)) に直接ジャンプする必要があります。しかし、xsr.nextTag() では達成できないようです。目的のルート ノードのみを反復処理する方法はありますか?
入力.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<fileVersionListWrapper FileName="src.h">
<VersionList versionNumber="1.80">
<Reviewed>
<commentId>v1.80(c5)</commentId>
<author>Robin</author>
<lines>47</lines>
<lines>48</lines>
<lines>49</lines>
</Reviewed>
<Reviewed>
<commentId>v1.80(c6)</commentId>
<author>Sujan</author>
<lines>82</lines>
<lines>83</lines>
<lines>84</lines>
<lines>85</lines>
</Reviewed>
</VersionList>
<VersionList versionNumber="1.81">
<Reviewed>
<commentId>v1.81(c4)</commentId>
<author>Robin</author>
<lines>47</lines>
<lines>48</lines>
<lines>49</lines>
</Reviewed>
<Reviewed>
<commentId>v1.81(c5)</commentId>
<author>Sujan</author>
<lines>82</lines>
<lines>83</lines>
<lines>84</lines>
<lines>85</lines>
</Reviewed>
</VersionList>
</fileVersionListWrapper>