Я хотел бы знать, как переместить узлы на один уровень выше, используя XSLT, если выполняются определенные условия.Чтобы привести пример, взгляните на следующий источник XML:
<Settings>
<String [...]>
<Boolean [...]/>
</String>
</Settings>
Это XML, который у меня есть в качестве исходной ситуации.Для ясности, имена узлов «Settings», «String», «Boolean» являются особыми узлами, которые мы определили.
Проблема в том, что логические узлы не допускаются внутри узлов «String».Вот почему я должен переместить эти "логические" узлы на уровень выше.Требуемый XML будет выглядеть следующим образом:
<Settings>
<String [...]></String>
<Boolean [...]/>
</Settings>
XSLT также должен работать с каждым узлом String, у которого есть родственный логический узел, независимо от позиции в дереве 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>
То, с чем я борюсь, это правило дляпереместить все "логические" узлы, которые являются родственными узлами "строковых" узлов на один уровень вверх.Как я могу это сделать?!?