XSLT для установки значений по умолчанию в пустых тегах XML - PullRequest
1 голос
/ 20 мая 2011

Я выполняю xsl-переход для некоторого xml и должен иметь возможность установить некоторые значения по умолчанию для нескольких тегов, если они отображаются как пустые.Например, мой xml имеет

<record>
<name>Bob</name>
<latitude>51.23645</latitude>
<longitude>-0.1254</longitude>
<rank></rank>
</record>

<record>
<name>Chantel</name>
<latitude></latitude>
<longitude></longitude>
<rank>5</rank>
</record>

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

<record>
<name>Bob</name>
<latitude>51.23645</latitude>
<longitude>-0.1254</longitude>
<rank>0</rank>
</record>

<record>
<name>Chantel</name>
<latitude>0.00</latitude>
<longitude>0.00</longitude>
<rank>5</rank>
</record>

Я думал, что это будет просто, но, похоже, не может его взломать.

Заранее спасибо.

Редактировать: это то, что я пытался сделать.Все еще учусь, так что просто шарить в темноте!

<xsl:template match="record">
  <xsl:when test="name()='latitude'">
    <xsl:element name="latitude">
      <xsl:choose>
        <xsl:when test="text()=''">
          <latitude>0.00</latitude>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="latitude"></xsl:value-of>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:element>
  </xsl:when>
</xsl:template>

1 Ответ

3 голосов
/ 20 мая 2011

Попробуйте это:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="rank[not(text())]">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:text>0</xsl:text>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="latitude[not(text())]|longitude[not(text())]">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:text>0.00</xsl:text>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

Добавление дополнительных шаблонов для установки значений по умолчанию для других тегов.

Как это работает: первый шаблон известен как «шаблон идентификации» и копирует узлы из входных данных в выходные без изменений. Второй шаблон сопоставляет узлы «ранга» без текстовых дочерних узлов (т. Е. Пустые узлы «ранга»), копирует их в выходные данные со своими атрибутами и затем вставляет значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...