2015-12-04 2 views
1

Я пытаюсь фильтровать данные XML с помощью XSLT версии 2.0Фильтр по дате в XSLT для-каждого

Вот некоторые данные Пример XML (мои данные по этой схеме)

<Messages> 
    <Message time="2015-08-06 22:00:11" type="Success">A</Message> 
    <Message time="2015-08-07 22:00:07" type="Success">B</Message> 
    <Message time="2015-08-07 22:00:15" type="Success">C</Message> 
</Messages> 

Я попытался с помощью этого решения XPath query filtering by date который предложил мне использовать перевод для преобразования даты в число, но я получаю сообщение об ошибке (в Visual Studio), который говорит

Отсутствует необходимый пробельные

Вот мой код:

<xsl:for-each select="Messages/Message[translate(@time, "- :", "") > translate('2015-08-06 22:00:11', "- :", "")]"> 

ответ

1

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

<xsl:for-each select="Messages/Message[translate(@time, "- :", "") > translate('2015-08-06 22:00:11', "- :", "")]"> 

к:

<xsl:for-each select="Messages/Message[translate(@time, '- :', '') > translate('2015-08-06 22:00:10', '- :', '')]"> 

P.S. Если вы используете XSLT 2.0, почему вы не сравниваете значения как даты?

+0

Как вы сравниваете значения как время данных в XSLT 2.0, есть ли у вас ссылка? – Dan

+1

@ Dan См. Http://www.w3.org/TR/xpath20/#id-value-comparisons, а также http://www.w3.org/TR/xpath-functions/#func-dateTime-equal и следующий. Если это не ответит на ваш вопрос, разместите его независимо от этого. –

0

я столкнулся с подобным вопросом, пытаясь использовать следующее:

<xsl:variable select="userCSharp:StringConcat("00")" name="var:v1"/> 

Он бросил «отсутствующую необходимую пробельную» ошибку. Для меня работало следующее решение:

<xsl:variable select="userCSharp:StringConcat(&quot;00&quot;)" name="var:v1"/> 

Он очистил ошибку и включил мой код.