如何从包含多个 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++;
    }
}