私はこれをここに残すことは嫌いですが、私は同様の質問hereに答えました。
Javaでは、実際にXMLを解析するためのオプションがかなりあります.XPathは最も遅くなりますが、コンテンツを照会するための素晴らしい表現言語を提供します。 DOMは2番目に遅いですが、歩くためにあなたの文書のメモリ内にツリーモデルを与えます。 SAXは速くなりますが、その場で文書を解析する際にリストを作成する必要があり、最後にSTAXが最も速くなりますが、あなたのリストを構築するためにあなたのフォーマットに特定のコードを書く必要があります。
最後に、私はXPathの容易さでSTAXのパフォーマンスを提供するSJXPと呼ばれるライブラリをお勧めします...それは2つの完全なブレンドです。
"/ root/Persons/list/Person/Name"のようなルールを書いて、それにあなたのドキュメントを渡すと、名前を打つたびにユーザーが指定したコールバックを呼び出すと、見つかりました。
あなたは、あなたが望むすべての値とビオラのルールをいくつか作成します... "/ root/Persons/list/Person"オープンタグのSTART_TAGルールを作成し、新しい "Person p =その後、すべてのサブ要素のヒットとして、あなただけの人に適切な値を設定し、あなたのコード内で新しい人()」、(例として)このような何か:
IRule linkRule = new DefaultRule(Type.CHARACTER, "/root/Persons/list/Person/Name") {
@Override
public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
// Get the last person we added on open-tag.
Person p = personList.get(personList.size() - 1);
// <Name> tag was parsed, 'text' is our parsed Name. Set it.
p.setName(text);
}
}
SJXPのいいところは、ということですメモリのオーバーヘッドが他のパーサーのアプローチよりも低く、パフォーマンスが向上します(SAXは一致の要素を解析しますが、STAXベースの解析では要素が要求されるまでストリームから要素を解析しません)。
DOMとすべてのNode要素をトラバースしてリストを作成するだけで、まったく同じコードを書くことになります。
XML->オブジェクトマッピングが快適であれば、他の人が言ったことを行い、JAXBを活用することができます。 XMLファイル用のスキーマを作成する必要があります。次に、完全にマップされたJavaオブジェクトを生成します。次にXMLファイルを直接Javaオブジェクトにマップし、 "persons.getList()"のようなものを呼び出したり、JAXBが生成するものを呼び出したりすることができます。
この場合のメモリのオーバーヘッドとパフォーマンスは、DOM解析と同程度です(大まかに)。
Pattern pattern = Pattern.compile("<Person>.*?<Name>(.*?)</Name>.*?<LastName>(.*?)</LastName>.*?</Person>", Pattern.MULTILINE | Pattern.DOTALL);
Matcher matcher = pattern.matcher(xml);
while (matcher.find())
{
String name = matcher.group(1);
String lastName = matcher.group(2);
}
ストア独自の者、データ構造内の名前とlastName:
感謝を参照してください?あなたの助けてくれてありがとう – ibm123
あなたはJavaに新しいので、私はこの例で正規表現を使用する新しい答えを追加します。どのようにそのことについて? – ZehnVon12
努力してくれてありがとう、私はあなたの答えを確認します – ibm123