2012-04-30 2 views
1

У меня есть xml-файл, в котором упоминается их единица.Что касается использования xsl: choose

<RQ>2.000</RQ> 

Мне нужно проверить мой файл xsl, независимо от того, является ли это знаком + или. Если их нет, тогда по умолчанию будет знак +. Я писал это с помощью xsl: выберите элемент, но он не работал.

+0

С ним нет связанных xsd. – Kundan

+0

К сожалению, я имел в виду ваш XSLT. –

ответ

0

Если вы хотите использовать XSL: выбрать, вы могли бы сделать что-то вроде этого

<xsl:template match="RQ"> 
    <xsl:choose> 
     <xsl:when test="number() != number()">NaN</xsl:when> 
     <xsl:when test="number() >= 0">+</xsl:when> 
     <xsl:otherwise>-</xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

Это также совладать с элементом, не содержащим номер. В качестве альтернативы вы можете лучше использовать сопоставление шаблонов и устранить необходимость в xsl: вообще выберите.

<xsl:template match="RQ[number() != number()]">NaN</xsl:template> 

<xsl:template match="RQ[number() >= 0]">+</xsl:template> 

<xsl:template match="RQ">-</xsl:template> 
+0

Он работал, как это - - + Вызов этот шаблон в XSL узла элемента. <- Указано Xpath -> Kundan

+1

Можете ли вы изменить свой вопрос с помощью этой информации, так как это сделает вещи намного яснее. Благодаря! –

0

Если это может быть гарантировано, что RQ является правильным представлением числа, а затем просто использовать:

substring('+-', 2 - (RQ > 0), 1) 

Полный демо:

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

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

<xsl:template match="/"> 
    <xsl:value-of select= 
     "substring('+-', 2 - (RQ > 0), 1)"/> 
</xsl:template> 
</xsl:stylesheet> 

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

<RQ>-2.000</RQ> 

производит разыскиваемого, правильный результат:

- 

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

<RQ>2.000</RQ> 

еще раз производит правильный результат:

+ 

При желании это выражение XPath один вкладыш может быть воплощен в виде отдельного имени шаблона для вызова из разных мест в коде - как это:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

<xsl:template match="/"> 
    <xsl:call-template name="sign"> 
     <xsl:with-param name="pNum" select="RQ"/> 
    </xsl:call-template> 
</xsl:template> 

<xsl:template name="sign"> 
    <xsl:param name="pNum"/> 

    <xsl:value-of select= 
     "substring('+-', 2 - (RQ > 0), 1)"/> 
</xsl:template> 
</xsl:stylesheet> 

Но обратите внимание, что вызов названного шаблона занимает три строки, а просто используется один лайнер, ну, одна строка.

Смежные вопросы