سؤال

أنا أستخدم حاليًا JDOM للقيام ببعض التحليل البسيط XML ، ويبدو أنه لا شيء آمنًا - لقد واجهت مشكلة مماثلة في استخدام محلل Java Dom المدمج ، فقط مع الكثير من واجهة برمجة التطبيقات للتجول.

علي سبيل المثال، XPath.selectNodes يأخذ Object كوسيطة لها ويعيد قائمة أولية ، والتي تشعر فقط Java 1.1

هل هناك مكتبات XML و XPATH عامة من أجل Java ، أم أن هناك سببًا لسبب عدم تمكنك من القيام باستعلامات XPath بطريقة آمنة من النوع؟

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

المحلول

إذا كنت معتادًا على محددات CSS على HTML ، فقد يكون من الجيد معرفة ذلك JSoup يدعم XML كذلك.


تحديث: حسنًا ، لقد أعطيت ذلك الإجابة المثيرة للجدل على ما يبدو. ومع ذلك ، قد ينتهي الأمر إلى أن يكون أسهل وأقل تم تركيبه من XPath عندما يكون كل ما تريده هو تحديد قيم العقدة. واجهة برمجة تطبيقات JSoup وهي عبارة عن بقعة للغاية. دعونا نعطي مثالا أكثر واقعية. على افتراض أن لديك ملف XML يشبه هذا:

<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person id="1">
        <name>John Doe</name>
        <age>30</age>
        <address>
            <street>Main street 1</street>
            <city>Los Angeles</city>
        </address>
    </person>
    <person id="2">
        <name>Jane Doe</name>
        <age>40</age>
        <address>
            <street>Park Avenue 1</street>
            <city>New York</city>
        </address>
    </person>
</persons>

ثم يمكنك اجتيازه كما يلي:

Document document = Jsoup.parse(new File("/persons.xml"), "UTF-8");

Element person2 = document.select("person[id=2]").first();
System.out.println(person2.select("name").text());

Elements streets = document.select("street");
for (Element street : streets) {
    System.out.println(street.text());
}

الذي يخرج

Jane Doe
Main street 1
Park Avenue 1

تحديث 2: منذ JSoup 1.6.2 الذي تم إصداره في مارس 2012 ، يتم دعم تحليل XML رسميًا من قبل JSoup API.

نصائح أخرى

AFAIK جميع استفسارات XML في Java غير تافهة من النوع ومعظمها متوافقة مع Java 1.3. ومع ذلك ، فإن المحلل/المولد المفضل لدي هو XML سحب محلل (XMLPP) نمط المحلل. أعتقد أن Java لديه XMlStreamReader و XMLStreamWriter إذا كنت تستخدم 1.6 والتي تشبه مكتبة XMLPP تقريبًا. أحب بشكل خاص أنه يمكنني كتابة طريقة getFoo التي تأخذ قارئ الدفق وتسحب منه وإرجاع كائن FOO. إنه الأفضل بين دوم وساكس. أعتقد أنه قد يشار إليه باسم Stax من قبل البعض.
أنا أحصل على القليل من التراجع ، لذا فأنا أتوقف الآن

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top