XSL условное форматирование - PullRequest
1 голос
/ 05 апреля 2011

Я использую xsl для преобразования xml в формат kml. Я хотел бы добавить условную логику в xsl для переключения styleUrl на основе части значения атрибута. Имя атрибута FROM_SYSTEM_ID. Формат значения атрибута - «A-123-CAM-1», где «CAM» является частью строки, чтобы определить, какое определение стиля использовать (в этом случае CAM означает «Камера», CAB - «Шкаф» и т. Д.).

Как можно проанализировать этот атрибут, чтобы выполнить необходимое переключение определения стиля?

Вот мой xsl шаблон:

<xsl:template match="Line">
    <Folder>
      <name>
        Lines
        <!--<xsl:value-of select="@name"/>-->
      </name>
      <xsl:for-each select="Row">
        <Placemark>
          <name>
            <xsl:value-of select="@FROM_SYSTEM_ID"/>
          </name>
          <description>
            <xsl:value-of select="@TO_SYSTEM_ID"/>
          </description>
          <styleUrl>#msn_open-diamond00</styleUrl>
          <LineString>
            <tessellate>1</tessellate>
            <coordinates>
              <xsl:value-of select="@FromLong"/>,<xsl:value-of select="@FromLat"/>,0 <xsl:value-of select="@ToLong"/>,<xsl:value-of select="@ToLat"/>,0
            </coordinates>
          </LineString>
        </Placemark>
      </xsl:for-each>
    </Folder>
  </xsl:template>

Ниже приведен пример XML:

* * 1010

1 Ответ

0 голосов
/ 05 апреля 2011

Вы можете извлечь часть CAM или CAB атрибута FROM_SYSTEM_ID, используя комбинацию substring-after и substring-before:

<xsl:value-of select="
    substring-before(
        substring-after(
            substring-after(@FROM_SYSTEM_ID, '-'), '-'), '-')"/>

Соедините это со своей таблицей стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="Line">
    <Folder>
      <name>
        Lines
        <!--<xsl:value-of select="@name"/>-->
      </name>
      <xsl:for-each select="Row">
        <Placemark>
          <name>
            <xsl:value-of select="@FROM_SYSTEM_ID"/>
          </name>
          <description>
            <xsl:value-of select="@TO_SYSTEM_ID"/>
          </description>
          <styleUrl>
              <xsl:value-of select="
                  substring-before(
                      substring-after(
                          substring-after(@FROM_SYSTEM_ID, '-'), '-'), '-')"/>
          </styleUrl>
          <LineString>
            <tessellate>1</tessellate>
            <coordinates>
              <xsl:value-of select="@FromLong"/>,<xsl:value-of select="@FromLat"/>,0 <xsl:value-of select="@ToLong"/>,<xsl:value-of select="@ToLat"/>,0
            </coordinates>
          </LineString>
        </Placemark>
      </xsl:for-each>
    </Folder>
  </xsl:template>
</xsl:stylesheet>

Применяется к этому входу:

<Line>
    <Row PrimaryRoute="A-123" FROM_SYSTEM_ID="A-123-CAB-1"
        TO_SYSTEM_ID="A-123-CAM-3" FromLat="42.624948852000" 
        FromLong="-83.107221652500"
        ToLat="42.624940325900" ToLong="-83.107353167000" />
    <Row PrimaryRoute="A-123" FROM_SYSTEM_ID="A-123-CAM-1"
        TO_SYSTEM_ID="A-123-HH-16" FromLat="42.641662528600" 
        FromLong="-83.151500129600"
        ToLat="42.641709802200" ToLong="-83.151552587600" />
</Line>

Создает следующий результат:

<Folder>
    <name>Lines</name>
    <Placemark>
        <name>A-123-CAB-1</name>
        <description>A-123-CAM-3</description>
        <styleUrl>CAB</styleUrl>
        <LineString>
            <tessellate>1</tessellate>
            <coordinates>-83.107221652500,42.624948852000,0
                -83.107353167000,42.624940325900,0
            </coordinates>
        </LineString>
    </Placemark>
    <Placemark>
        <name>A-123-CAM-1</name>
        <description>A-123-HH-16</description>
        <styleUrl>CAM</styleUrl>
        <LineString>
            <tessellate>1</tessellate>
            <coordinates>-83.151500129600,42.641662528600,0
                -83.151552587600,42.641709802200,0
            </coordinates>
        </LineString>
    </Placemark>
</Folder>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...