如何从包含多个 xml 的输入 xml 文件中单独创建多个 xml 文件
How to Create Mulitple xml files separately from an input xml file containing multiple xmls in it
将AllFile.xml作为输入并产生四个输出xmls.The输入文件的大小大于100MB。
输入xml文件(AllFiles.xml):-
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
//some raw strings
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
//some raw strings
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
//some raw strings
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
预期输出:-
1) file1.xml
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
2)file2.xml
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
3)file3.xml
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
4)file4.xml
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
提供 java 实用程序或可从 java 访问的任何第三方实用程序。
您可以尝试这样的方法,这可能不是最好的方法。我刚刚展示了一个例子。写入文件应按要求完成。
public static void main( String[] args )
{
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<canonMessage xmlns=\"\" xmlns:xsi=\"\">\n" +
"<header>\n" +
"</header>\n" +
"<trailer>\n" +
"</trailer>\n" +
"</canonMessage>\n" +
"//some raw strings\n" +
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<canonMessage xmlns=\"\" xmlns:xsi=\"\">\n" +
"<header>\n" +
"</header>\n" +
"<trailer>\n" +
"</trailer>\n" +
"</canonMessage>\n" +
"\n" +
"//some raw strings\n" +
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<canonMessage xmlns=\"\" xmlns:xsi=\"\">\n" +
"<header>\n" +
"</header>\n" +
"<trailer>\n" +
"</trailer>\n" +
"</canonMessage>\n" +
"\n" +
"//some raw strings\n" +
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<canonMessage xmlns=\"\" xmlns:xsi=\"\">\n" +
"<header>\n" +
"</header>\n" +
"<trailer>\n" +
"</trailer>\n" +
"</canonMessage>";
Pattern p = Pattern.compile( "(<\?xml)([\s\S]*?)(>)([\s\S]*?)(<\/canonMessage>)" );
Matcher matcher = p.matcher( xml );
int iteration = 0;
while( matcher.find() )
{
String fileStr= matcher.group( );
System.out.println( fileStr );
System.out.println( "\n\n" );
BufferedWriter writer;
try
{
writer = new BufferedWriter( new FileWriter ( "file" + iteration + ".xml") );
writer.write( fileStr );
writer.flush( );
writer.close();
}
catch( IOException e )
{
e.printStackTrace();
}
iteration++;
}
}
将AllFile.xml作为输入并产生四个输出xmls.The输入文件的大小大于100MB。
输入xml文件(AllFiles.xml):-
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
//some raw strings
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
//some raw strings
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
//some raw strings
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
预期输出:- 1) file1.xml
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
2)file2.xml
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
3)file3.xml
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
4)file4.xml
<?xml version="1.0" encoding="UTF-8"?>
<canonMessage xmlns="" xmlns:xsi="">
<header>
</header>
<trailer>
</trailer>
</canonMessage>
提供 java 实用程序或可从 java 访问的任何第三方实用程序。
您可以尝试这样的方法,这可能不是最好的方法。我刚刚展示了一个例子。写入文件应按要求完成。
public static void main( String[] args )
{
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<canonMessage xmlns=\"\" xmlns:xsi=\"\">\n" +
"<header>\n" +
"</header>\n" +
"<trailer>\n" +
"</trailer>\n" +
"</canonMessage>\n" +
"//some raw strings\n" +
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<canonMessage xmlns=\"\" xmlns:xsi=\"\">\n" +
"<header>\n" +
"</header>\n" +
"<trailer>\n" +
"</trailer>\n" +
"</canonMessage>\n" +
"\n" +
"//some raw strings\n" +
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<canonMessage xmlns=\"\" xmlns:xsi=\"\">\n" +
"<header>\n" +
"</header>\n" +
"<trailer>\n" +
"</trailer>\n" +
"</canonMessage>\n" +
"\n" +
"//some raw strings\n" +
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<canonMessage xmlns=\"\" xmlns:xsi=\"\">\n" +
"<header>\n" +
"</header>\n" +
"<trailer>\n" +
"</trailer>\n" +
"</canonMessage>";
Pattern p = Pattern.compile( "(<\?xml)([\s\S]*?)(>)([\s\S]*?)(<\/canonMessage>)" );
Matcher matcher = p.matcher( xml );
int iteration = 0;
while( matcher.find() )
{
String fileStr= matcher.group( );
System.out.println( fileStr );
System.out.println( "\n\n" );
BufferedWriter writer;
try
{
writer = new BufferedWriter( new FileWriter ( "file" + iteration + ".xml") );
writer.write( fileStr );
writer.flush( );
writer.close();
}
catch( IOException e )
{
e.printStackTrace();
}
iteration++;
}
}