2017-02-03 6 views
-1

У меня есть вопрос относительно разбора xml.Java - Как разобрать XML с бесконечной рекурсивной структурой?

Я хочу разработать парсер Java DOM (или любой другой в Java), способный разобрать XML со структурой, например, как показано ниже:

<root> 
    <parameters> 
     <parameter> <!-- ParameterA --> 
      <name>a</name> 
      <values> <!-- possible values for ParameterA --> 
       <value> 
        <name>a1</name> 
        <parameter> <!-- ParameterB dependent of ParameterA --> 
         <name>a11</name> 
         <values> <!--possible values for ParameterB --> 
          <value> 
           <name>a111</name> 
          </value> 
          <value> 
           <name>a112</name> 
          </value> 
         </values> 
        </parameter> 
       </value> 
       <value> 
        <name>a2</name> 
        <parameter> <!-- ParameterC dependent of ParameterA --> 
         <name>a22</name> 
         <values> <!--possible values for ParameterC --> 
          <value> 
           <name>a222</name> 
          </value> 
         </values> 
        </parameter> 
       </value> 
      </values> 
     </parameter> 
     <parameter> <!-- ParameterX --> 
      <name>b</name> 
      <values> <!-- possible values for ParameterX --> 
       <value> 
        <name>b1</name> 
       </value> 
      </values> 
     </parameter> 
    </parameters> 
</root> 

Чтобы возобновить XML strucutre:

  • Параметр имеет имя и список возможных значений (параметр может не иметь значений).
  • Значение имеет имя и может содержать параметры.

пример:

если ParameterB является иждивенцем параметр А, то будет иметь параметр А внутри его значение тега тег параметр, который будет иметь информацию о parameterB и т.д ...

Я хочу, чтобы мой Dom Parser смог получить все комбинации параметров в соответствии с иерархией xml (по отношению к их значениям).

Для приведенного выше примера, то дом Parser должен вернуть

>> a-a1-a11-a111-b-b1 
>> a-a1-a11-a112-b-b1 
>> a-a2-a22-a222-b-b1 

Я не знаю, если это возможно, я уже стучится головой в течение нескольких дней над этим ...

Спасибо,

Пожалуйста, не сдерживайте предложения.

+0

Вы пробовали что-нибудь? Если да, то что вы пробовали – Gab

ответ

0

У вас есть рекурсивная структура данных, поэтому очевидный подход заключается в том, чтобы сделать ваш DOM «парсер» рекурсивным. Фактически, у вас нет реальной альтернативы, если вы используете экстрактор на основе DOM.

Однако, я думаю, ваша проблема в том, что вы пытаетесь сделать две вещи, в то же время они являются:

  • найти все возможные значения для каждого параметра
  • образуют множество всех возможных комбинации этих значений

Если вы выполняете две задачи отдельно, ее проще кодировать.