я в настоящее время есть файл XML, который выглядит следующим образом:Преобразование XML в группе полей в столбцы с помощью XSLT
<Plan>
<People>
<Person>
<name>Fred Bloggs</name>
<position>CEO</position>
<responsibility>Everything</responsibility>
</Person>
<Person>
<name>Joe Bloggs</name>
<position>Cleaner</position>
<responsibility>Cleaning</responsibility>
</Person>
<Person>
<name>Wilma Bloggs</name>
<position>CTO</position>
<responsibility>Tech stuff</responsibility>
</Person>
<Person>
<name>Betty Bloggs</name>
<position>MD</position>
<responsibility>Management</responsibility>
</Person>
</People>
</Plan>
Эффективно это список людей, каждый из которых имеют список полей. Список полей будет расширяться в будущем, но у каждого человека будут одинаковые поля.
Я хочу преобразовать и форматировать это, используя XSLT и XSL-FO, для создания PDF-файла, который имеет четыре столбца, причем каждая строка содержит имя поля, а затем значения поля для трех объектов Person. Например, так как есть четыре человека, перечисленные выше, я хочу, чтобы таблица выглядит следующим образом:
Name Fred Bloggs Joe Bloggs Wilma Bloggs
Position CEO Cleaner CTO
Responsibility Everything Cleaning Tech stuff
Name Betty Bloggs
Position MD
Responsibility Management
Эффективна, в I группы XML файла поле на человеке (так что каждый человек имеет три поля), в то время как в final output Я хочу группировать людей по полям (поэтому каждая строка имеет одно и то же поле для трех разных людей).
Если я пишу код XSL-FO вручную, я могу добиться этого, производя разметку вдоль этих линий для каждой строки:
<fo:table-row>
<fo:table-cell>
<fo:block>Name</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>Fred Bloggs</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>Joe Bloggs</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>Wilma Bloggs</fo:block>
</fo:table-cell>
</fo:table-row>
Это дает мне результат, я хочу, так что я знаю, что XSL-FO для части PDF работает нормально, но мне нужно автоматизировать процесс. Могу ли я достичь этого напрямую через XSLT?
Другой вариант я могу думать о том, чтобы произвести отдельный файл XML, который явно соответствует структуре макета, а затем преобразовать, что, например:
<PersonTable>
<PersonRow>
<name1>Fred Bloggs</name1>
<name2>Joe Bloggs</name2>
<name3>Wilma Bloggs</name3>
</PersonRow>
</PersonTable>
Конечное, наименее предпочтительным вариантом, будет производить полные данные XSL-FO автоматически, полностью перешагивая шаг трансформации (т.е. я эффективно перехожу от XSL-FO в PDF). Я не хочу этого делать, поскольку в конечном итоге я хотел бы иметь возможность отправлять различные файлы шаблонов XSL без изменения программного обеспечения, но я могу вернуться к этому варианту, если предыдущие не будут доступны.
"Могу ли я достигнуть этого непосредственно через XSLT *?" Конечно, вы можете. Где именно вы застряли? –
Я зациклился на том, как получить из записей X Person, каждый с Y-полями, в таблицу с 4 столбцами и Y строк для каждых трех записей Person. Если я хотел преобразовать записи Person в одну строку на человека и по одному столбцу на поле, я мог бы (и сделал) сделать это легко, но это не масштабируется до десятков полей, поскольку столбцы становятся слишком маленькими. – pwaring
Можете ли вы изменить свой вопрос и добавить точный ожидаемый результат вашего примера ** в качестве кода **? –