أفضل طريقة لتحليل مستندات XML المخصصة المتنوعة في Java

StackOverflow https://stackoverflow.com/questions/23106

  •  09-06-2019
  •  | 
  •  

سؤال

ما هي أفضل طريقة لتحليل مستندات XML متعددة ومنفصلة ومخصصة باستخدام Java؟

هل كانت مفيدة؟

المحلول

سأستخدم ستاكس لتحليل XML، فهو سريع وسهل الاستخدام.لقد كنت أستخدمه في مشروعي الأخير لتحليل ملفات XML التي يصل حجمها إلى 24 ميجابايت.هناك مقدمة لطيفة عن java.net, ، والذي يخبرك بكل ما تحتاج إلى معرفته للبدء.

نصائح أخرى

في الأساس، لديك طريقتان رئيسيتان لتحليل XML في Java:

  • ساكس, ، حيث تستخدم معالج للحصول على ما تريده فقط في ملف XML الخاص بك والتخلص من الباقي
  • DOM, ، الذي يوزع ملفك طوال الوقت، ويسمح لك بالتقاط جميع العناصر بطريقة تشبه الشجرة.

هناك طريقة أخرى مفيدة جدًا لتحليل XML، وإن كانت أحدث قليلاً من هذه الطرق، وتم تضمينها في JRE فقط منذ Java6، وهي ستاكس.تم تصميم StAX كطريقة وسطية بين نهج DOM القائم على الشجرة ونهج SAX القائم على الحدث.إنه مشابه تمامًا لـ SAX في حقيقة أن تحليل المستندات الكبيرة جدًا أمر سهل، ولكن في هذه الحالة "يسحب" التطبيق المعلومات من المحلل اللغوي، بدلاً من تحليل أحداث "الدفع" إلى التطبيق.يمكنك العثور على مزيد من التوضيح حول هذا الموضوع هنا.

لذا، اعتمادًا على ما تريد تحقيقه، يمكنك استخدام أحد هذه الأساليب.

سوف ترغب في استخدامها org.xml.sax.XMLReader (http://docs.Oracle.com/javase/7/docs/api/org/xml/sax/XMLReader.html).

إذا كنت تحتاج فقط إلى التحليل فإنني أوصي باستخدام مكتبة XPath.وهنا مرجع جميل: http://www.ibm.com/developerworks/library/x-javaxpathapi.html

ولكن قد ترغب في التفكير في تحويل XMLs إلى كائنات ثم السماء هي الحد الأقصى.لذلك يمكنك استخدام 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));
        }   
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top