Фильтрация XML-узлов в памяти без DOM?

#xml #language-agnostic #xml-parsing #sax #smalltalk

#xml #не зависит от языка #синтаксический анализ xml #sax #smalltalk

Вопрос:

Учитывая большой XML, я хочу иметь ЧАСТЬ структуры XML в виде дерева в памяти (ЭТО НЕ DOM !!), например, учитывая

 <MAIN>
    <A>
        <B>1</B>
        <C>2</C>
        <D>3</D>
            <H>7</H>
            <I>9</I>
        <E>2</D>
    </A>
    <A>
        <B>4</B>
        <C>5</C>
        <D>6</D>
            <H>3</H>
            <I>0</I>
        <E>3</D>
    </A>
</MAIN>
  

после того, как пользователь выберет узлы B и H, я хочу иметь в памяти

 <MAIN>
    <A>
        <B>1</B>
        <C>2</C>
        <D>3</D>
            <H>7</H>
    </A>
    <A>
        <B>4</B>
        <C>5</C>
        <D>6</D>
            <H>3</H>
    </A>
</MAIN>
  

иногда пользователь хочет выполнить фильтрацию по содержимому узла, например, по всем B-узлам, превышающим 3, и т.д.

существует ли библиотека (SAX?) для выполнения такой задачи? предпочтительно на Smalltalk, но подойдет любой другой язык.

Ответ №1:

В VisualWorks включена библиотека SAX.

Комментарии:

1. Позволяет ли эта библиотека SAX создавать поддерево DOM и редактировать его?

Ответ №2:

На Java, используя JDOM или DOM4J (и, возможно, также XOM), вы можете написать настраиваемый конструктор для достижения того, чего вы хотите.

Пример для DOM4J

Ответ №3:

Процессор STX позволяет обрабатывать большой документ потоковым способом, но сохранять (возможно, преобразованные) части этого документа в переменных или буферах.