Разбор текстового файла с несколькими тегами и запись его в другой текстовый файл

Необходимо прочитать текстовый файл, который выглядит как XML. Текстовый файл состоит из нескольких XML-файлов с родительскими тегами. Необходимо разобрать файл и построчно, и необходимо написать соответствующие элементы требуемых дочерних тегов, даже если они повторяются несколько раз. раз внутри родительского тега, в одной строке, в другой текстовый файл. Нужно записать элементы в следующую строку после родительского тега. Я знаю, как читать файл и записывать файл, но я не могу понять логику чтобы прочитать его в соответствии с требованием. Пожалуйста, помогите мне.

    <parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping" fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd">
<Child1 Child1Scheme="http://www.google.com">1234566546</Child1>
<Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-23243423</Child1>
<country countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country>
<state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">23423423423</state>
</parentnode>

<parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping" fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd">
<Child1 Child1Scheme="http://www.google.com">1234566546</Child1>
<Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-154555</Child1>
<country countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country>
<state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">434343242</state>
</parentnode>

<parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping" fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd">
<Child1 Child1Scheme="http://www.google.com">1234566546</Child1>
<Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-4566545</Child1>
<country countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country>
<state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">2323232323</state>
</parentnode>

person Euphoria    schedule 27.03.2014    source источник
comment
много вещей, которые вам нужно сделать здесь. лучше начни! покажите нам какой-нибудь из ваших xml-файлов или коллекций.   -  person Klemens Morbe    schedule 27.03.2014
comment
Было бы лучше, если бы вы разместили образец входного файла, а затем опубликовали результат, который вы ожидаете. Я ничего не могу понять из ОП.   -  person hellboy    schedule 27.03.2014
comment
StAX может помочь вам проанализировать файл, хотя я не уверен, как он ведет себя, когда в вашем файле есть несколько корневых элементов...   -  person Puce    schedule 27.03.2014
comment
@hellboy Файл прикреплен, пожалуйста, помогите мне   -  person Euphoria    schedule 27.03.2014
comment
@Puce это не XML для парсинга, это текстовый файл, содержащий данные в формате XML.   -  person Euphoria    schedule 27.03.2014
comment
@KlemensMorbe Любые другие детали, которые вы хотите, пожалуйста, дайте мне знать.   -  person Euphoria    schedule 27.03.2014
comment
@Euphoria Я знаю об этом, но если вам повезет, StAX все еще может работать. Или он также включает данные, отличные от XML?   -  person Puce    schedule 28.03.2014


Ответы (1)


Сначала вы должны сделать свой файл действительным xml:

<?xml version="1.0"?>
<rootnode>
    <parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping"
        fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd">
        <Child1 Child1Scheme="http://www.google.com">1234566546</Child1>
        <Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-23243423</Child1>
        <country
            countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country>
        <state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">23423423423</state>
    </parentnode>

    <parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping"
        fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd">
        <Child1 Child1Scheme="http://www.google.com">1234566546</Child1>
        <Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-154555</Child1>
        <country
            countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country>
        <state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">434343242</state>
    </parentnode>

    <parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping"
        fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd">
        <Child1 Child1Scheme="http://www.google.com">1234566546</Child1>
        <Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-4566545</Child1>
        <country
            countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country>
        <state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">2323232323</state>
    </parentnode>
</rootnode>

И тогда вы можете начать читать свой файл, просто проверьте его.

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ReadXMLFile {

    public static void main(String argv[]) {

        try {
            File fXmlFile = new File("file.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(fXmlFile);

            doc.getDocumentElement().normalize();

            System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

            NodeList nList = doc.getElementsByTagName("parentnode");

            for (int temp = 0; temp < nList.getLength(); temp++) {

                Node nNode = nList.item(temp);

                System.out.println("Current Element :" + nNode.getNodeName());

                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nNode;
                    System.out.println("Staff id : " + eElement.getElementsByTagName("Child1").item(0).getTextContent());
                    System.out.println("First Name : " + eElement.getElementsByTagName("Child1").item(0).getTextContent());
                    System.out.println("Last Name : " + eElement.getElementsByTagName("country").item(0).getTextContent());
                    System.out.println("Nick Name : " + eElement.getElementsByTagName("state").item(0).getTextContent());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
person Klemens Morbe    schedule 27.03.2014
comment
Я очень ценю вашу помощь, это было правильно, что вы сказали в формате ib XML, но я спрашиваю о входном файле в текстовом формате, который состоит из множества XML вместе в одном текстовом файле, он должен быть текстовым файлом. - person Euphoria; 27.03.2014
comment
не могли бы вы рассказать мне больше об этом? я не вижу причин, почему вы должны читать xml или набор xml как обычный текстовый файл. Я знаю, что вы хотите прочитать его построчно, но xml работает иначе. - person Klemens Morbe; 28.03.2014
comment
У меня есть коллекция XML в текстовом файле, это файл журнала, который создается. Мне нужно узнать конкретный элемент, сколько раз повторяется конкретный элемент. - person Euphoria; 31.03.2014
comment
Это оно? вам нужно посчитать теги элементов и все? или вам тоже нужно считать атрибуты? - person Klemens Morbe; 31.03.2014
comment
Mobe: необходимо записать элемент тега в другой текстовый файл, например, требуемые значения дочернего тега в одной строке, которые принадлежат родительскому тегу. - person Euphoria; 31.03.2014
comment
как должен выглядеть вывод нового файла? ты решил это? - person Klemens Morbe; 02.04.2014
comment
: Я не решил это, и вывод должен выглядеть как Child1-значение child1-значение .... в текстовом файле - person Euphoria; 02.04.2014