Клянусь, я посмотрел на существующие темы! Но мне все еще нужна помощь.
Мне нужно взять очень грязный XML и преобразовать его в очень аккуратный файл CSS для загрузки в базу данных сайта.
Мне действительно не нужно готовое решение, но мне нужна помощь в понимании процесса, которому я должен следовать, чтобы решить мою проблему в XSLT. Я не буду просить вас всех написать мне код, просто скажите мне, какие элементы и структура шаблона мне нужны. Я также хотел бы, чтобы сообщество могло объяснить логику процесса, чтобы я мог изменить его по мере необходимости.
У меня есть xml, в котором есть записи во всех порядках и числах:
<record-list>
<record>
<title>Title One</title
<author>Author One</author>
<subject>
Subject One A
Subject One B
Subject One C
</subject>
<subject>Subject Two</subject>
<subject>Subject Three</subject>
<subject>Subject Four</subject>
</record>
<record>
<subject>Subject Five</subject>
<title>Title Two</title>
<useless-element>Extra Stuff One</useless-element>
</record>
<record>
<title>Title Three</title>
<subject>Subject Six</subject>
<author/>
</record>
</record-list>
Итак, у меня есть несколько номеров повторяющихся элементов, некоторые отсутствующие элементы, некоторые пустые элементы, элементы не в порядке, а некоторые элементы с дополнительными переносами строк.
Мне нужен файл CSV, который читается, как показано ниже, или с другим количеством повторений темы (см. Требования ниже)
"Title","Subject","Subject","Subject","Author"
"Title One","Subject One A ; Subject One B ; Subject One C","Subject Two","Subject Three","Author One"
"Title Two", "Subject Five","","",""
"Title Three","Subject Six","","",""
Требования к конечному результату
-Количество столбцов любых повторяющихся элементов либо должно соответствовать записи с наибольшим количеством повторений этого элемента, либо программе необходимо отрезать любые повторения после определенного числа.
-Каждой новой записи требуется разрыв строки, и в файлах не может быть других разрывов строк (только в качестве разделителей записей).
Каждый элемент должен быть в одинаковом порядке для каждой записи.
-Каждый текст элемента нуждается в кавычках вокруг него (для обработки внутренних запятых).
Пустые или пустые элементы нуждаются в пустых кавычках.
-Дополнительные элементы не могут быть отправлены на выход
Что я сделал:
Я выяснил, как избавиться от лишних разрывов строк в элементах с помощью функции перевода, хотя мне бы хотелось, чтобы решение, позволяющее мне заменять разрывы строк более чем одним символом (сейчас мне нужно будет запустить find-and-replace для изменения символа-заполнителя на пробел-точка-точка в моем выводе). Я могу получить кавычки, запятые и разрывы строк в выводе с текстовыми элементами и пробелами.
Однако я не знаю, как выровнять порядок элементов, обработать повторы элемента или пропустить только некоторые элементы, все еще используя элемент в качестве сигнала для разрыва строки.
Сейчас мне просто нужно решение, которое работает, даже если требуются все виды ручных манипуляций или несколько таблиц стилей. Я даже могу найти и заменить в текстовом редакторе, если вывод хороший. Пожалуйста, помогите с решением XSLT, я даже не знаю других подходящих языков программирования (колледж Matlab много лет назад не помогает).
Я думаю, мне нужно запустить два преобразования. Я посмотрел на библию XSLT, Кулинарную книгу Мангано XSLT, где он использовал два преобразования для аналогичной проблемы. Однако его решение настолько обобщенно, что я не могу его понять. Если я не могу понять, как это работает, я не могу изменить это для своих нужд. Извините, но без программирования, объяснения на этом сайте и в тексте в лучшем случае непростые. Тем не менее, я думаю, что у меня проблема с некоторыми новыми функциями, по сравнению с другими, заданными на этом форуме.
Любая помощь, будь то не обобщенный код или даже просто предложенная процедура для нескольких прогонов через мой процессор, была бы замечательной. Я боролся с этим больше недели и добился очень незначительного прогресса.
Спасибо
CAMC