Разбор Java XML - PullRequest
       70

Разбор Java XML

2 голосов
/ 12 июня 2011

У меня есть файл, содержащий несколько XML-документов, как показано ниже.

<?xml version="1.0"?><Node>...<Node>...</Node>...</Node><?xml version...

, что повторяется несколько раз.

Я использую Java, у меня открыт FileChannel для файла, и у меня есть байтовый буфер для чтения. Был бы признателен, если есть встроенный способ или более простой способ или уже решенный способ сделать частичный анализ байтов XML с Java. Например, как это:

FooParser parser = new FooParser();

while (...)
{
    buffer.flip();
    parser.parse(buffer);
    buffer.compact();
    if (parser.done())
    {
        xmlDocs.add(parser.xml());
        parser.reset();
    }
    file.read(buffer);
    ...
}

Ответы [ 3 ]

2 голосов
/ 12 июня 2011

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

На самом деле, теперь, когда вы упомянули об этом, вы можете использовать парсер, чтобы делать то, что вы хотите. Но я уверен, что парсеры SAX и DOM в API не будут делать то, что вы хотите.

1 голос
/ 27 июля 2011

Мне пришлось сделать что-то подобное, и я ответил (сам) здесь с подклассом Reader, который оборачивает все для более простого использования.

0 голосов
/ 12 июня 2011

Обычно проверяют последовательность <? в начале XML-файла, поскольку XML-файл должен начинаться с объявления xml (спецификация не должна ожидаться в середине файла). Поэтому я бы посмотрел на кодировку и разделил файл, как уже предлагалось, при каждом появлении <? и «xml» впоследствии ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...