كيف يمكنني استخدام XML :: LIBXML لتحليل XML باستخدام SAX؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

رمز المثال الوحيد الذي وجدته حتى الآن أمر قديم لن يعمل بعد الآن (يستخدم الفئات المهملة). كل ما أحتاج إليه هو شيء أساسي يوضح:

  1. تحميل وتحليل XML من ملف

  2. تحديد معالج الأحداث ساكس (S)

  3. قراءة السمات أو القيم النصية للعنصر مرت إلى معالج الأحداث

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

المحلول

ماذا عن التوزيع نفسه?

اذهب إلى XML :: صفحة توزيع LIBXML والنقر تصفح.

لاحظ الحذر التالي في توثيق:

في الوقت الحالي، يوفر XML :: LIBXML فقط واجهة غير مكتملة لتنفيذ SAX الأصلي LIBXML2. لا يتم اختبار التنفيذ الحالي في بيئة الإنتاج. قد يسبب مشاكل ذاكرة كبيرة أو يظهر سلوكا خاطئا.

يوجد ايضا XML :: ساكس الذي يأتي مع وثائق لطيفة. وبعد لقد استخدمتها عدة مرات وعملت بشكل جيد لأغراضي.

نصائح أخرى

كان اقتراح سنان جيدا، لكنه لم يواصل كل النقاط. فيما يلي برنامج بسيط جدا الذي تم حصصتهما معا:

ملف 1: المعالجون (mysaxhandler.pm)

  package MySAXHandler;
  use base qw(XML::SAX::Base);

  sub start_document {
    my ($self, $doc) = @_;
    # process document start event
  }

  sub start_element {
    my ($self, $el) = @_;
    # process element start event
    print "Element: " . $el->{LocalName} . "\n";
  }

1;

ملف 2: برنامج الاختبار (test.pl)

#!/usr/bin/perl

use strict;
use XML::SAX;
use MySAXHandler;

my $parser = XML::SAX::ParserFactory->parser(
        Handler => MySAXHandler->new
);

$parser->parse_uri("some-xml-file.xml");

ملاحظة: كيفية الحصول على قيم سمة عنصر. لم يتم وصف هذا بطريقة يمكنني استخدامه. استغرق الأمر أكثر من ساعة لمعرفة بناء الجملة. ها هو. في ملف XML الخاص بي، كانت السمة SS: فهرس. كان تعريف مساحة الاسم ل SS XMLNS: SS = "urn: schemas-microsoft-com: Office: جدول البيانات". وبالتالي، من أجل الحصول على سمة فهرس سخيفة، كنت بحاجة إلى هذا:

my $ssIndex = $el->{Attributes}{'{urn:schemas-microsoft-com:office:spreadsheet}Index'}{Value};

كان ذلك مؤلما.

XML :: LIBXML :: أقليات ساكس واجهة بيرل سيكس وهناك وثيقة لطيفة.

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