Преобразование XML в CSV, с осложнениями - PullRequest
1 голос
/ 18 октября 2011

Клянусь, я посмотрел на существующие темы! Но мне все еще нужна помощь.

Мне нужно взять очень грязный 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

1 Ответ

1 голос
/ 18 октября 2011

Я бы посоветовал взглянуть на Конвертер CSV в XML в XSLT 2.0 . На этой странице много полезной информации, в том числе о том, как ее запустить.

...