Мне нужно преобразовать структуру XML-файла, а фигурируемый XSLT может быть лучшим решением (это то, для чего это правильно?) У меня есть некоторый опыт работы с XSLT, но он немного ограничен, поэтому мне нужно немного руководство.XSLT Разделить дочерние элементы на новые узлы
Сценарий выглядит следующим образом; У меня есть XML, содержащий одну или несколько записей. Каждая запись имеет набор полей, и каждое поле имеет набор подполей. Порядок вспомогательных полей значителен. Что нужно сделать, так это то, что входная структура должна быть преобразована так, чтобы каждое возникновение кодов подполя A и K приводило к появлению нового поля (с новым кодом и подполем K, переименованным в A) на выходе с подпунктом поля, которые следует за подполем A или K, как показано в примере ниже. Количество подполей K произвольно и может отличаться от записи, чтобы записать xslt, чтобы быть немного общим.
Вот мой вход XML:
<?xml version="1.0" encoding="UTF-8" ?>
<record>
<field code="123">
<subfield code="A">Abc</subfield>
<subfield code="B">De</subfield>
<subfield code="K">Fgh</subfield>
<subfield code="C">IJ</subfield>
<subfield code="K">Klmn</subfield>
<subfield code="D">OP</subfield>
</field>
<field>... more datafields... </field>
</record>
Нужный выход следующим образом:
<?xml version="1.0" encoding="UTF-8" ?>
<record>
<field code="124">
<subfield code="A">Abc</subfield>
<subfield code="B">De</subfield>
</field>
<field code="124">
<subfield code="A">Fgh</subfield>
<subfield code="C">IJ</subfield>
</field>
<field code="124">
<subfield code="A">Klmn</subfield>
<subfield code="D">OP</subfield>
</field>
<field>... more datafields... </field>
</record>
Если кто-нибудь может дать мне какой-то образец XSLT, что по крайней мере указывает меня в правильном направлении, я я был бы очень обязан.
EDIT: Просто уточнить. Между подполями A и K может быть любое количество подполей.
Вход имеет код поля = 123 "', почему на выходе есть поле code = "124" '? И можете ли вы использовать XSLT 2.0? Похоже, хорошая работа для использования ' ...'. –
Это * каждое нечетное подполе *, которое должно быть сопряжено со следующим даже одним, или * каждым подполем A или K *? Или это то же самое? –
Код поля @MartinHonnen = "124" правильный на выходе. Это, так сказать, формат перевода. Я пишу это в Visual Studio 2012, не уверен в поддержке XSLT 2.0. Вам нужно будет изучить это. –