как использовать xsl для различения двух похожих тегов (переменных) - PullRequest
3 голосов
/ 26 апреля 2011

Мне нужно создать xsl, способный читать два XML-файла, которые имеют одинаковую структуру, кроме первого тега:

входящий xml:

<beans:beans> <fix-inbound> <message></message> </fix-inbound> </beans:beans>

исходящий xml:

<beans:beans> <fix-outbound> <message></message> </fix-outbound> </beans:beans>

решения, которые я смог найти, были:

  • создание двух файлов для чтения входящих и исходящих
  • ужасно, если нравится:

    <xsl:if test="fix-inbound">
        code to read the content
    </xsl:if>
    <xsl:if test="fix-outbound"> 
        same piece of code to read the content 
    </xsl:if>
    
  • с использованием переменной в моем <xsl:for-each select="$valueOfMyFirstTag">, значение которой может быть fix-inbound или fix-outbound

Однако я понятия не имею, как получить значение первого тега. Возможно ли это с помощью xsl?

Есть ли более элегантный способ решения этой проблемы?

Ответы [ 3 ]

2 голосов
/ 26 апреля 2011

Вы можете использовать

<xsl:for-each select="/*/fix-inbound | /*/fix-outbound">

(или, в зависимости от вашего варианта использования, использовать apply-templates вместо for-each).

1 голос
/ 27 апреля 2011

Использование :

<xsl:template match="/">
 <xsl:apply-templates select="/*/*[1]"/>
</xsl:template>

<xsl:template match="fix-inbound">
 <!-- Perform whatever processing is necessary  -->
</xsl:template>

<xsl:template match="fix-outbound">
 <!-- Perform whatever processing is necessary  -->
</xsl:template>

Объяснение :

Инструкция <xsl:apply-templates select="/*/*[1]"/> вызывает любой шаблон, который наилучшим образом соответствует первому дочернему элементуверхний элемент, который будет выбран для выполнения и применен.

Если документ первого типа, применяется шаблон, соответствующий fix-inbound.

Если документ второго типа,применяется сопоставление с шаблоном fix-outbound.

Примечание: В этом решении условные инструкции вообще не используются - в XSLT они редко необходимы, и если присутствуют условные инструкции, этосигнал о том, что какой-то рефакторинг может быть уместным.

1 голос
/ 27 апреля 2011

Не совсем понятно, что вы пытаетесь сделать или где вы терпите неудачу, но из вашего поста действительно следует, что вы еще не обнаружили радости шаблонных правил, которые составляют суть истинной обработки XSLT. Возможно, вы также еще не обнаружили силу подстановочных знаков (*) в путях или псевдооператора "//".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...