2016-01-29 7 views
0

Я хочу сделать сравнение двух разных дат. Чтобы понять это, я хочу преобразовать в число. Пример ввода:from string to number xslt

<file> 
       <date>2015-11-06 09:00/> 
</file> 
<history> 
       <date>2016-01-12 10:00/> 
</history> 

Сначала я извлекаю время от даты. И поместите результат в var.

<xsl:for-each select="//item/metadata/document/file/date">   
      <xsl:variable name="d_log" 
       select="substring-before(., ' ')" as="xs:string"/> 

Таким образом, значение переменной будет, например, 2015-11-06. Следующим шагом является то, что я хочу преобразовать 2015-11-06 в 20151106.

Вопросы как я могу преобразовать из строки в число? Или есть более простой способ?

+1

Добро пожаловать в Переполнение стека. Вы, скорее всего, получите хорошие ответы на вопросы, если вы покажете, что вы пробовали, в форме, позволяющей другим воспроизвести проблему (это, конечно, сложно, если вы не знаете, с чего начать). Не показывая свою работу, создается впечатление, что вы ее не сделали, и просто хотите, чтобы другие делали вашу работу за вас. Существует хороший совет по заданию эффективных вопросов в файлах справки [SO help] (http://stackoverflow.com/help/how-to-ask) и в эссе Эрика Раймонда и эссе Рика Моэна [Как задавать вопросы умным способом] (http://catb.org/~esr/faqs/smart-questions.html). –

+0

И 'as =" xs: string "похоже, что вы используете XSLT 2.0, который имеет специальный тип данных' xs: date', подходящий для работы и сравнения любых дат, поэтому мне интересно, почему вы хотите использовать сравнение чисел для этих дат значения. –

+0

Я пробовал с xs: date, но я не смог. Потому что я не знаю, как я могу извлечь время, начиная с даты. – jwnl

ответ

1

Вы можете сделать:

translate(substring-before(., ' '), '-', '') 

, чтобы получить ожидаемое число.

Однако ваш синтаксис подсказывает, что вы используете XSLT 2.0. Если да, почему бы вам не преобразовать данные строки в xs:date или xs:dateTime и сравнить их как таковые?

+0

Thnx это работает – jwnl

0

Вот мой результат.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs" 
    version="2.0"> 
    <xsl:output method="xml" indent="yes"></xsl:output> 
    <xsl:template match="/"> 

     <aaa> 
      <xsl:for-each select="//item/metadata/document/file/date">   
      <xsl:variable name="d_log" 
       select="translate(substring-before(., ' '), '-', '')" 
       as="xs:string"/> 

       <xsl:for-each select="../../history/log/date"> 
        <xsl:variable name="d_doc" select="translate(substring-before(., ' '), '-', '')" as="xs:string"/>    
       <xsl:if test="$d_doc > $d_log"> 
        <bb> 
        <xsl:value-of select="node()"/> 
        </bb> 
       </xsl:if>   
      </xsl:for-each> 
      </xsl:for-each>   
     </aaa> 
    </xsl:template> 
</xsl:stylesheet>