Лучший метод для анализа различных настраиваемых XML-документов в Java

Каков наилучший метод синтаксического анализа нескольких отдельных пользовательских XML-документов с помощью Java?

Покажите нам, как далеко вы продвинулись - мы не будем писать это за вас. Вы хотите сделать это с помощью DOM, SAX или другого? Что вы пробовали до сих пор? Какие руководства / документацию вы просмотрели?

mdm 14.03.2011 16:19

Используйте java dom api или sax для синтаксического анализа xml. Придайте более конкретную структуру xml.

0xAX 14.03.2011 16:20

Попробуйте сопоставление касторка.

Nikunj 14.03.2011 16:20

Что ты уже сделал? У вас есть код, который вы хотите нам показать?

Nishan 14.03.2011 16:20

если есть эффективность, я бы использовал SAX или по личным предпочтениям - StAX

Yaneeve 14.03.2011 16:21

Голосуя за закрытие, в вопросе, на который я ответил, должно быть все, что вам нужно.

wds 14.03.2011 16:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
8
6
7 333
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы захотите использовать org.xml.sax.XMLReader (http://docs.oracle.com/javase/7/docs/api/org/xml/sax/XMLReader.html).

Ответ принят как подходящий

Я бы использовал Stax для синтаксического анализа XML, он быстрый и простой в использовании. Я использовал его в своем последнем проекте для анализа файлов XML размером до 24 МБ. На java.net есть хорошее введение, в котором рассказывается все, что вам нужно знать, чтобы начать работу.

По сути, у вас есть два основных метода синтаксического анализа XML в Java:

  • SAX, где вы используете обработчик, чтобы получить только то, что вы хотите в своем XML, и отбросить остальное
  • ДОМ, который постоянно анализирует ваш файл и позволяет вам захватывать все элементы в более древовидной форме.

Еще один очень полезный метод синтаксического анализа XML, хотя и немного более новый, чем эти, и включенный в JRE только с Java6, - это StAX. StAX был задуман как промежуточный метод между DOM, основанным на дереве, и подходом SAX, основанным на событиях. Он очень похож на SAX в том, что анализировать очень большие документы легко, но в этом случае приложение «извлекает» информацию из парсера, а не анализирует, «подталкивая» события к приложению. Вы можете найти больше объяснений по этому поводу здесь.

Итак, в зависимости от того, чего вы хотите достичь, вы можете использовать один из этих подходов.

скопировано из моего ответа в повторяющейся ветке, чтобы предоставить больше информации о различных методах

Valentin Rocher 07.12.2010 16:58

Если вам нужно только разобрать, я бы рекомендовал использовать библиотеку XPath. Вот хорошая ссылка: http://www.ibm.com/developerworks/library/x-javaxpathapi.html

Но вы можете подумать о том, чтобы превратить XML в объекты, и тогда пределом будет небо. Для этого вы можете использовать XStream, это отличная библиотека, которую я использую много.

Используйте библиотеку dom4j

Сначала прочтите документ

import java.net.URL;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;

public class Foo {

    public Document parse(URL url) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(url);
        return document;
    }
}

Затем используйте XPATH, чтобы получить нужные значения.

public void get_author(Document document) {
    Node node = document.selectSingleNode( "//AppealRequestProcessRequest/author" );
    String author = node.getText();
    return author;
}

Ниже приведен код извлечения некоторого значения значения с помощью vtd-xml.

import com.ximpleware.*;

public class extractValue{
    public static void  main(String s[]) throws VTDException, IOException{
        VTDGen vg = new VTDGen();
        if (!vg.parseFile("input.xml", false));
        VTDNav vn = vg.getNav();
        AutoPilot ap = new AutoPilot(vn);
        ap.selectXPath("/aa/bb[name='k1']/value");
        int i=0;
        while ((i=ap.evalXPath())!=-1){
            System.out.println(" value ===>"+vn.toString(i));
        }   
    }
}

Другие вопросы по теме