<xsl:variable> Распечатывают значение переменной XSL, использующей <xsl:value>

Вы можете создать сложенную диаграмму области, используя глиф патча. Сначала я использовал df.cumsum для суммирования значений в кадре данных по строкам. После этого я добавляю две строки в фрейм данных с максимальной и минимальной датой и значением Y. Я строю патчи в обратном порядке списка столбцов (исключая столбец даты), чтобы сначала отображался человек с наивысшими значениями лица с более низкими значениями наносятся на график после.

Другая реализация диаграммы с областями с накоплением может быть найдена здесь .

import pandas as pd
from bokeh.plotting import figure, show
from bokeh.palettes import inferno
from bokeh.models.formatters import DatetimeTickFormatter

df = pd.read_csv('stackData.csv')
df_stack = df[list(df)[1:]].cumsum(axis=1)
df_stack['date'] = df['date'].astype('datetime64[ns]')

bot = {list(df)[0]: max(df_stack['date'])}
for column in list(df)[1:]:
    bot[column] = 0
df_stack = df_stack.append(bot, ignore_index=True)
bot = {list(df)[0]: min(df_stack['date'])}
for column in list(df)[1:]:
    bot[column] = 0
df_stack = df_stack.append(bot, ignore_index=True)

p = figure(x_axis_type='datetime')
p.xaxis.formatter=DatetimeTickFormatter(days=["%d/%m/%Y"])
p.xaxis.major_label_orientation = 45


for person, color in zip(list(df_stack)[2::-1], inferno(len(list(df_stack)))):
    p.patch(x=df_stack['date'], y=df_stack[person], color=color, legend=person)
p.legend.click_policy="hide"
show(p)

enter image description here

17
задан tomato 13 April 2009 в 00:08
поделиться

3 ответа

В этом случае для установки переменной не требуется никаких условий .

Это однострочное выражение XPath :

boolean(joined-subclass)

имеет значение true () только тогда, когда существует дочерний узел текущего узла с именем join-subclass , а в противном случае - false () .

] Полная таблица стилей выглядит так: :

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

 <xsl:template match="class">
   <xsl:variable name="subexists"
        select="boolean(joined-subclass)"
   />

   subexists:  <xsl:text/>
   <xsl:value-of select="$subexists" />
 </xsl:template>
</xsl:stylesheet>

Обратите внимание , что использование функции XPath boolean () в этом выражении предназначено для преобразования узла (или его отсутствия) в один из логические значения true () или false () .

21
ответ дан 30 November 2019 в 12:07
поделиться

Ваша основная проблема - думать, что переменная, которую вы объявили вне шаблона, - это та же переменная, которая «установлена» внутри оператора выбора. Это не то, как работает XSLT, переменная не может быть переназначена. Это больше похоже на то, что вы хотите:

<xsl:template match="class">
  <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
  <xsl:variable name="subexists">
    <xsl:choose>
      <xsl:when test="joined-subclass">true</xsl:when>
      <xsl:otherwise>false</xsl:otherwise>
    </xsl:choose>
  </xsl:variable>
  subexists:      <xsl:value-of select="$subexists" />
</xsl:template>

И если вам нужно, чтобы переменная имела "глобальную" область видимости, объявите ее вне шаблона:

<xsl:variable name="subexists">
  <xsl:choose>
     <xsl:when test="/path/to/node/joined-subclass">true</xsl:when>
     <xsl:otherwise>false</xsl:otherwise>
  </xsl:choose>
</xsl:variable>

<xsl:template match="class">
   subexists:      <xsl:value-of select="$subexists" />
</xsl:template>
7
ответ дан 30 November 2019 в 12:07
поделиться

В XSLT то же самое может объявляется только один раз и может быть присвоено значение только при его объявлении. Если одновременно объявляется более одной переменной, они фактически являются разными переменными и имеют разную область действия.

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

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

    <xsl:template match="class">
    <xsl:variable name="subexists">
            <xsl:choose>
                <xsl:when test="joined-subclass">true</xsl:when>
                <xsl:otherwise>false</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        subexists:  <xsl:text/>    
        <xsl:value-of select="$subexists" />
    </xsl:template>
</xsl:stylesheet>

Когда вышеуказанное преобразование применяется к следующему документу XML :

<class>
 <joined-subclass/>
</class>

, получается требуемый результат :

    subexists:  true
6
ответ дан 30 November 2019 в 12:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: