Как сделать так, чтобы результат узла отличался в зависимости от существования определенного узла, использующего XLST? - PullRequest
1 голос
/ 01 июля 2010

Моя система создает XML, который содержит узел, который, в зависимости от типа события, имеет другое имя. Имя может быть <floatRate> или <fixedRate>. Путь всегда один и тот же, только другое имя узла.

Мне нужно преобразование, которое может заполнить одно поле на основе этого имени. Поле будет называться <type>, а аргумент должен быть плавающим или фиксированным в зависимости от имени узла Можно ли это сделать?

Ответы [ 3 ]

1 голос
/ 01 июля 2010

Это преобразование :

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="fixedRate|floatRate">
   <type><xsl:value-of select=
           "substring-before(name(),'Rate')"/></type>
 </xsl:template>
</xsl:stylesheet>

при применении к этому документу XML :

<rates>
    <fixedRate>2.3</fixedRate>
    <floatRate>1.1</floatRate>
</rates>

дает желаемый результат:

<rates>
   <type>fixed</type>
   <type>float</type>
</rates>
0 голосов
/ 01 июля 2010

Предположим, у нас есть этот документ в качестве ввода:

<result>
    <floatRate>1.1</floatRate>
</result>

Эта таблица стилей:

<xsl:stylesheet
          xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
          version="1.0">
    <xsl:template match="result">
        <type>
        <xsl:value-of select="substring-before(name(floatRate|fixedRate),'Rate')"/>
        </type>
    </xsl:template>
    <xsl:template match="text()"/>
</xsl:stylesheet>

Выход:

<type>float</type>
0 голосов
/ 01 июля 2010

В выражениях select / mach можно использовать логическое «или», как в

match="floatRate|fixedRate"

Отредактируйте свой вопрос и добавьте образцы ввода, ожидаемого результата и того, что вы уже пытались получить, чтобы получить дополнительную помощь

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