Я пытаюсь сгенерировать XML на основе 2 других XML. Я опрашиваю БД, которая возвращает данные о людях (в запросе может быть n человек). Конечный XML должен иметь точное количество тегов данных в качестве отдельных тегов имен в XML, поступающих из DB . Например:
1-й XML - Получение этого из БД
<parent>
<child>
<name>John</name>
<city>Boston</city>
</child>
<child>
<name>John</name>
<city>Seattle</city>
</child>
<child>
<name>Allison</name>
<city>Houston</city>
</child>
</parent>
2-й XML - Получение этого из другого источника
<details>
<parent>
<detail>
<city>Boston</city>
<code>abc</code>
</detail>
<detail>
<city>Houston</city>
<code>xyz</code>
</detail>
</parent>
<parent>
<detail>
<city>Boston</city>
<code>abc</code>
</detail>
<detail>
<city>Seattle</city>
<code>mno</code>
</detail>
</parent>
<parent>
<detail>
<city>Houston</city>
<code>xyz</code>
</detail>
<detail>
<city>Seattle</city>
<code>mno</code>
</detail>
</parent>
</details>
Сначала мне нужно создайте 2 тега данных, так как есть два разных имени - Джон и Эллисон (эта часть уже сделана и работает нормально). Затем мне нужно проверить Джона, какие уникальные теги города присутствуют в возвращаемых строках БД. Давайте рассмотрим 1-е XML, у нас есть Джон, связанный с Бостоном и Сиэтлом. Итак, один за другим, я проверю эти города во 2-м XML и для каждого тега parent , который мне соответствует, я создам новый тег details и вставлю все соответствующее содержимое ,
1) Если нет подходящих записей, тег подробностей создавать не следует, так как нет подходящей записи.
2) Придет тег city под тегом parent . Значения тега city будут УНИКАЛЬНЫМИ в теге parent . Я должен сопоставить city один за другим во втором XML и взять значения из всех соответствующих тегов city для всех родителей из второго XML и заполнить таким образом где все совпадения в теге parent помещаются в соответствующий тег detail в выводе XML. PFB примеры XML-файлов, которые объяснят лучше -
Окончательный ожидаемый XML -
<FinalData>
<Data>
<name>John</name>
<details>
<detail>
<city value="Boston">abc</city>
</detail>
<detail>
<city value="Boston">abc</city>
<city value="Seattle">mno</city>
</detail>
<detail>
<city value="Seattle">mno</city>
</detail>
</details>
</Data>
<Data>
<name>Allison</name>
<details>
<detail>
<city value="Houston">xyz</city>
</detail>
<detail>
<city value="Houston">xyz</city>
</detail>
</details>
</Data>
</FinalData>
В настоящее время мой XSLT приводит к чему-то вроде ниже -
<FinalData>
<Data>
<name>John</name>
<details>
<detail>
<city value="Boston">abc</city>
<city value="Boston">abc</city>
<city value="Seattle">mno</city>
<city value="Seattle">mno</city>
</detail>
</details>
</Data>
<Data>
<name>Allison</name>
<details>
<detail>
<city value="Houston">xyz</city>
<city value="Houston">xyz</city>
</detail>
</details>
</Data>
</FinalData>
Надеюсь, это понятно, потому что я не умею давать объяснения.