Я хотел бы знать, как перемещать узлы на один уровень с помощью XSLT, если выполняются определенные условия. Чтобы привести пример, обратитесь к следующему источнику XML:XSLT: переместить узел на один уровень вверх
<Settings>
<String [...]>
<Boolean [...]/>
</String>
</Settings>
Это как есть исходный код XML. Чтобы быть ясным, имена узлов «Настройки», «String», «Boolean» являются специальными узлами, которые мы определили.
Проблема в том, что в узлах «String» не допускаются «булевские» узлы. Вот почему мне приходится перемещать эти «булевы» узлы на уровень вверх. Нужный XML будет выглядеть следующим образом:
<Settings>
<String [...]></String>
<Boolean [...]/>
</Settings>
XSLT также должен работать с каждым узлом Струнного который имеет родственный булеву узел, независимо от положения в XML-дереве.
До сих пор я узнал, что вы должны сначала скопировать все ваши XML с помощью «правила идентичности», а затем применить некоторые специальные правила для желаемых преобразований:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<!-- Identity rule -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<!-- special rules ... -->
</xsl:stylesheet>
То, что я борюсь с это правило для перемещения всех «булевых» узлов, которые являются братьями и сестрами узлов «String» на один уровень вверх. Как мне это сделать?!?
Хороший вопрос, +1. См. Мой ответ для варианта шаблона шаблона «переопределить идентификатор» - я предоставил несколько более точное переопределение. :) –