У меня есть xml со значениями partyId и parentPartyId в простой форме. Я хочу преобразовать его в форму иерархического древовидного формата.XSLT для преобразования XML в иерархический формат
Я создал схему в соответствии с желаемым результатом. Я пытаюсь использовать выражения Axis Names в http://www.keller.com/xslt/8/. Я не получаю, как преобразовать источник в желаемый формат?
Источник и требуемая цель:
ИСТОЧНИК:
<OutputCollection xmlns="http://xmlns.test.com/pcbpel/adapter/db/PartyHierarchy">
<Output>
<level>1</level>
<Parent_Party xsi:nil="true"/>
<Party>Party-1</Party>
</Output>
<Output>
<level>2</level>
<Parent_Party>Party-1</Parent_Party>
<Party>Party-1-1</Party>
</Output>
<Output>
<level>2</level>
<Parent_Party>Party-1</Parent_Party>
<Party>Party-1-2</Party>
</Output>
<Output>
<level>3</level>
<Parent_Party>Party-1-2</Parent_Party>
<Party>Party-1-2-1</Party>
</Output>
<Output>
<level>3</level>
<Parent_Party>Party-1-2</Parent_Party>
<Party>Party-1-2-2</Party>
</Output>
<Output>
<level>3</level>
<Parent_Party>Party-1-2</Parent_Party>
<Party>Party-1-2-3</Party>
</Output>
<Output>
<level>2</level>
<Parent_Party>Party-1</Parent_Party>
<Party>Party-1-3</Party>
</Output>
<Output>
<level>3</level>
<Parent_Party>Party-1-3</Parent_Party>
<Party>Party-1-3-1</Party>
</Output>
<Output>
<level>3</level>
<Parent_Party>Party-1-3</Parent_Party>
<Party>Party-1-3-2</Party>
</Output>
</OutputCollection>
TARGET:
<OutputCollection xmlns="http://xmlns.test.com/pcbpel/adapter/db/PartyHierarchy">
<Output>
<level>1</level>
<Parent_Party xsi:nil="true"/>
<Party>Party-1</Party>
<Children>
<level>2</level>
<Parent_Party>Party-1</Parent_Party>
<Party>Party-1-1</Party>
</Children>
<Children>
<level>2</level>
<Parent_Party>Party-1</Parent_Party>
<Party>Party-1-2</Party>
<Children>
<level>3</level>
<Parent_Party>Party-1-2</Parent_Party>
<Party>Party-1-2-1</Party>
</Children>
<Children>
<level>3</level>
<Parent_Party>Party-1-2</Parent_Party>
<Party>Party-1-2-2</Party>
</Children>
<Children>
<level>3</level>
<Parent_Party>Party-1-2</Parent_Party>
<Party>Party-1-2-3</Party>
</Children>
</Children>
<Children>
<level>2</level>
<Parent_Party>Party-1</Parent_Party>
<Party>Party-1-3</Party>
<Children>
<level>3</level>
<Parent_Party>Party-1-3</Parent_Party>
<Party>Party-1-3-1</Party>
</Children>
<Children>
<level>3</level>
<Parent_Party>Party-1-3</Parent_Party>
<Party>Party-1-3-2</Party>
</Children>
</Children>
</Output>
</OutputCollection>
Большое спасибо, Мартин! Я потратил много часов на следующие, предшествующие и т. Д., Но это решение работает и очень кратким. Я новичок в продвинутом XSLT. Можете ли вы предложить любую ссылку на концепции или аналогичные проблемы для практики? –
Существует сборник часто задаваемых вопросов http://www.dpawson.co.uk/xsl/sect2/sect21.html. И вы должны уметь находить подробное объяснение понятий в различных книгах, посвященных XSLT и XPath, которые предлагают издатели. Есть также ресурсы в Интернете по адресу http://www.cranesoftwrights.com/training/index.htm, а страница http://stackoverflow.com/tags/xslt/info также содержит ссылки на онлайн-курсы. –
Спасибо Мартину! Если возможно, можете ли вы показать, как мы можем достичь того же результата, используя имена Axis (а именно: следующий-сиблинг ::, предшествующий и т. Д.). –