Какой лучший способ вывести тег, только если он существует в XSL? - PullRequest
2 голосов
/ 08 апреля 2010

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

<xsl:for-each select="State">
    <StateAbbreviation>
        <xsl:value-of select="."/>
    </StateAbbreviation>
</xsl:for-each>

По сути, «in» XML имеет тег State, который мне нужно вывести как наш распознанный тег StateAbbreviation. Тем не менее, я хочу вывести ТОЛЬКО тег StateAbbreviation, если «in» XML содержит тег State. Блок выше выполняет это просто отлично, но не очень интуитивно (по крайней мере, не для меня), так как каждый раз, когда я вижу for-each, я предполагаю, что их больше одного, тогда как в этих случаях есть 0 или 1 .

Мой вопрос: это стандартная конструкция? Если нет, есть ли более предпочтительный способ сделать это? Я мог бы, очевидно, проверить длину строки (что также делается в других таблицах стилей), но хотел бы сделать это одинаково, «лучшим» способом везде (при условии, конечно, что существует «лучший» способ. Совет? Предложения?

Ответы [ 2 ]

4 голосов
/ 08 апреля 2010

Вы можете заменить for-each на:

<xsl:if test="State">
1 голос
/ 08 апреля 2010

Рекомендуется в XSLT рекомендовать использовать xsl:apply-templates вместо xsl:for-each.

В этом случае простой

<xsl:apply-templates select="State"/>

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

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