現在、JAXBを使用してJava POJOからXMLにマップされているオブジェクトがあります。そのXMLを取得したら、ユーザーの入力に基づいて選択された要素のセットのみに絞る必要があることがあります。結果は指定された "フィールド"のみを持つXMLでなければなりません。GroovyまたはJavaの要素「パス」でXML文字列をフィルタリングする方法
私はSAXフィルタを使用した類似の使用例を数多く見つけましたが、それらは非常に複雑に見えますが、回答が必要な場所に届きません。最も近い例はthis oneであり、結果から単一のパスは除外されます。反対のホワイトリストに選択された要素のリストが必要です。
例オブジェクト:School.xml
<SchoolInfo RefId="34060F68BE3942F1B1264E6D2CC3C353">
<LocalId>57</LocalId>
<SchoolName>Foobar School of Technology</SchoolName>
<Principal>
<FirstName>Bob</FirstName>
<LastName>Smith</LastName>
</Principal>
<StateProvinceId>34573</StateProvinceId>
<LEAInfoRefId>340666687E3942F1B1264E1223453C353</LEAInfoRefId>
<PhoneNumberList>
<PhoneNumber Type="0096">
<Number>555-832-5555</Number>
</PhoneNumber>
<PhoneNumber Type="0096">
<Number>555-999-5555</Number>
</PhoneNumber>
</PhoneNumberList>
</SchoolInfo>
は、 "フィルタ" として、次の入力を考える:
List<String> filter = [
"LocalId",
"SchoolName",
"Principal/FirstName",
"PhoneNumberList/PhoneNumber/Number",
]
Iが出力する必要がありますは何
<SchoolInfo RefId="34060F68BE3942F1B1264E6D2CC3C353">
<LocalId>57</LocalId>
<SchoolName>Foobar School of Technology</SchoolName>
<Principal>
<FirstName>Bob</FirstName>
</Principal>
<PhoneNumberList>
<PhoneNumber Type="0096">
<Number>555-832-5555</Number>
</PhoneNumber>
<PhoneNumber Type="0096">
<Number>555-999-5555</Number>
</PhoneNumber>
</PhoneNumberList>
</SchoolInfo>
これを達成するための最良のライブラリですか? SAXフィルタリングは複雑に感じられ、XSLTは動的フィルタリングに適していないようです。
私が近づくのを助ける例は高く評価されます。
は 'Groovy'は' XmlParser'または 'MarkupBuild'と良いことがあります。 [here](http://mrhaki.blogspot.in/2011/05/groovy-goodness-change-xml-structure.html)のサンプルを参照してください。 – Rao
これを実行するコードサンプルを探しているのか、単にlibsの推奨を求めていますか? –
@ vtd-xml-authorコードサンプルは素晴らしかったですが、誰かに私のために作業を依頼しているわけではありません。使用する適切なライブラリに関するアドバイスとそのライブラリ内のメソッドが私が探しているものです。 –