У меня есть XML-структура, такая как:
<foos>
<foo>
<foo_type>1</foo_type>
<foo_date>2011_1_1</foo_date>
</foo>
<foo>
<foo_type>1</foo_type>
<foo_date>2012_1_1</foo_date>
</foo>
<foo>
<foo_type>2</foo_type>
<foo_date>2011_1_1</foo_date>
</foo>
</foos>
Что мне нужно сделать, это получить одно значение из этого, где foo_type == 1, а дата - самая поздняя дата.Ранее я использовал сортировку по убыванию для списка дат.Если foo_type == 1 отсутствует, то должно появиться пустое поле.(Поля заключены в кавычки, запятая - это разделитель.)
Я планировал сделать это, создав список всех объектов типа 1. Я не уверен, как это сделать в xsl.что-то вроде этого:
<xsl:variable name="fooList">
<xsl:for-each select="foos/foo">
<xsl:if test="contains(foo_type, '1')">
<xsl:value-of select="concat($fooList, ', ', foo_date)"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
тогда я бы проанализировал список, разделенный запятыми, и отсортировал бы, чтобы определить самую последнюю дату:
<xsl:variable name="latestFooDate">
<xsl:sort select="split(fooList)" order="descending" />
</xsl:variable>
и, наконец, вызвал шаблон для форматирования результата:
<xsl:call-template name="dateFormat">
<xsl:with-param name="date" select="latestFooDate" />
</xsl:call-template>
Имейте в виду, что это псевдокод, потому что я не знаю, как это сделать.Теперь, если кто-то может помочь превратить мое псевдо в настоящее.