Обновлено включить некоторые дополнительные нюансысложный сценарий для XSLT
У меня есть сценарий XML, который потребует некоторых сложных XSLT. Я пытался понять это самостоятельно, но пока не увенчался успехом.
Начнем с того, что здесь представлена составная структура XML.
<Author id="1234">
<reviews>poor</reviews>
<Media>
<MediaSet>
<MediaCode type="CD">474747</MediaCode>
</MediaSet>
<MediaSet>
<MediaCode type="CD">535353</MediaCode>
</MediaSet>
<MediaSet>
<MediaCode type="eBook">989898</MediaCode>
</MediaSet>
<MediaSet>
<MediaCode type="download">202020</MediaCode>
</MediaSet>
<MediaSet>
<MediaCode type="book">161616</MediaCode>
</MediaSet>
<MediaSet>
<MediaCode type="DVD">828282</MediaCode>
</MediaSet>
<MediaSet>
<OtherCode type="widget" number="747474"/> <!--note different element name and structure-->
</MediaSet>
</Media>
<name>JimBob</name>
</Author>
Этот пример является очень упрощенной версией того, что я имею дело с, но я хочу, чтобы создать выходной файл, который выглядит, как это для импорта базы данных:
<row>
<field name="authorID">1234</field>
<field name="reviews">poor</field>
<field name="CD">474747</field>
<field name="name">JimBob</field>
</row>
<row>
<field name="authorID">1234</field>
<field name="reviews">poor</field>
<field name="CD">535353</field>
<field name="name">JimBob</field>
</row>
<row>
<field name="authorID">1234</field>
<field name="reviews">poor</field>
<field name="eBook">989898</field>
<field name="name">JimBob</field>
</row>
<row>
<field name="authorID">1234</field>
<field name="reviews">poor</field>
<field name="download">989898</field>
<field name="name">JimBob</field>
</row>
<row>
<field name="authorID">1234</field>
<field name="reviews">poor</field>
<field name="widget">555555</field>
<field name="name">JimBob</field>
</row>
- CD, электронные книги , загрузка может происходить в ноль или более раз.
- Мне нужно создать отдельную строку для каждого экземпляра
- Есть определенные элементы (например, «книга», «DVD» и многие другие), которые я хочу игнорировать.
- Есть 100 000 «авторов» со своей уникальной комбинацией «MediaCodes».
- Есть смешанные элементы, которые мне нужны для извлечения данных из
У меня есть код, чтобы принять его из исходной структуры XML грести структуры XML/полей для импорта базы данных работают нормально, проблема я имею дело с итерированием через XML и созданием нескольких строк, когда существует множество точек данных.
Это что-то, что можно управлять только с помощью XSLT или мне придется использовать другой язык для обработки?
Обратите внимание: файл XML, который я обрабатываю, имеет гораздо более сложную структуру, а - это примерно 325MB.
Если у вас уже есть код, который можно взять из исходной структуры XML в XML-структуру строки/поля, отправьте его здесь (фрагмент, если он слишком длинный в полном объеме). –
Я ответил на ваш вопрос «как есть». Тем не менее, IMHO вы делаете ошибку, сглаживая структуру, прежде чем импортировать ее в базу данных.Предполагая реляционную базу данных, вам было бы намного лучше импортировать данные дважды, в две отдельные таблицы: Authors and Media, вместо плоской таблицы с множеством избыточных повторений одних и тех же данных. –
Кроме того, у вас должно быть одно поле для типа носителя: «CD», «Ebook» и т. Д. Являются * значениями * и еще одним полем для мультимедийного кода, общим для всех типов. В противном случае поиск базы данных станет очень громоздким. –