I have the following xml file.
<?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog> <changeSet author="debdipta.h (generated)" id="1442927616936-399"> <createTable tableName="SI_FORWARDING_EVENT_HISTORY_AU"> <column name="FORWARDING_ID_O" type="NUMBER" /> <column name="FORWARDING_ID_N" type="NUMBER" /> <column name="ASSIGNMENT_ID_O" type="NUMBER" /> <column name="ASSIGNMENT_ID_N" type="NUMBER" /> <column name="PROCESS_INSTANCE_ID_O" type="NUMBER" /> <column name="PROCESS_INSTANCE_ID_N" type="NUMBER" /> <column name="ORIGINAL_USER_ID_O" type="NUMBER" /> <column name="ORIGINAL_USER_ID_N" type="NUMBER" /> <column name="FORWARD_FROM_USER_O" type="NUMBER" /> <column name="FORWARD_FROM_USER_N" type="NUMBER" /> <column name="FORWARD_TO_USER_O" type="NUMBER" /> <column name="FORWARD_TO_USER_N" type="NUMBER" /> <column name="COMMENTS_O" type="VARCHAR2(4000 CHAR)" /> <column name="COMMENTS_N" type="VARCHAR2(4000 CHAR)" /> <column name="XML_O" type="VARCHAR2(4000 CHAR)" /> <column name="XML_N" type="VARCHAR2(4000 CHAR)" /> <column name="CREATED_BY_O" type="NUMBER" /> <column name="CREATED_BY_N" type="NUMBER" /> <column name="CREATION_DATE_O" type="date" /> <column name="CREATION_DATE_N" type="date" /> <column name="AUDIT_TRAIL_REASON" type="VARCHAR2(1000 CHAR)" /> <column name="TRANSACTION_TYPE" type="VARCHAR2(100 CHAR)" /> </createTable> </changeSet> <changeSet author="deb.h" id="4588999797"> <createView /> </changeSet> <changeSet author="deb.h" id="4588999797"> <createTable /> </changeSet> <changeSet author="deb.h" id="4588999797"> <createView /> </changeSet> </databaseChangeLog>
I want to extract blocks only with createTable, which will be extracted to another xml file using xpath. The result should look like this:
<databaseChangeLog> <changeSet author="debdipta.h (generated)" id="1442927616936-399"> <createTable tableName="SI_FORWARDING_EVENT_HISTORY_AU"> <column name="FORWARDING_ID_O" type="NUMBER"/> <column name="FORWARDING_ID_N" type="NUMBER"/> <column name="ASSIGNMENT_ID_O" type="NUMBER"/> <column name="ASSIGNMENT_ID_N" type="NUMBER"/> <column name="PROCESS_INSTANCE_ID_O" type="NUMBER"/> <column name="PROCESS_INSTANCE_ID_N" type="NUMBER"/> <column name="ORIGINAL_USER_ID_O" type="NUMBER"/> <column name="ORIGINAL_USER_ID_N" type="NUMBER"/> <column name="FORWARD_FROM_USER_O" type="NUMBER"/> <column name="FORWARD_FROM_USER_N" type="NUMBER"/> <column name="FORWARD_TO_USER_O" type="NUMBER"/> <column name="FORWARD_TO_USER_N" type="NUMBER"/> <column name="COMMENTS_O" type="VARCHAR2(4000 CHAR)"/> <column name="COMMENTS_N" type="VARCHAR2(4000 CHAR)"/> <column name="XML_O" type="VARCHAR2(4000 CHAR)"/> <column name="XML_N" type="VARCHAR2(4000 CHAR)"/> <column name="CREATED_BY_O" type="NUMBER"/> <column name="CREATED_BY_N" type="NUMBER"/> <column name="CREATION_DATE_O" type="date"/> <column name="CREATION_DATE_N" type="date"/> <column name="AUDIT_TRAIL_REASON" type="VARCHAR2(1000 CHAR)"/> <column name="TRANSACTION_TYPE" type="VARCHAR2(100 CHAR)"/> </createTable> </changeSet> <changeSet author="deb.h" id="4588999797"> <createTable></createTable> </changeSet> </databaseChangeLog>
The code I have done now looks like this:
public class extractXML { public static void main(String[] args)throws Exception{
I do not understand how to iterate over xpath and extract the necessary blocks.
source share