XSLT 1.0 - резервный узел после условия <xsl: if test ..> - PullRequest
0 голосов
/ 21 марта 2019

У меня есть файл xslt, как показано ниже;

<xsl:if test="/ItemList/Item/cx">
            <kml:Circle>

           </kml:Circle>

</xsl:if>
<xsl:if test="/ItemList/Item/Lon">
            <kml:Point>

          </kml:Point>

</xsl:if>

После выполнения этого xslt в XML-файле, как показано ниже, он генерирует избыточные теги, такие как <kml:Point/> и <kml:Circle/>. Но я не хочу этот тег.

Пример XML-файла

<ItemList>
  <Item>
    <Name>1</Name>
    <Lon>66.406180329538</Lon>
    <Lat>35.7185924672465</Lat>

  </Item>
  <Item>
    <Name>2</Name>
    <cx>1</cx>
    <cy>2</cy>
    <rx>3</rx>
    <ry>4</ry>
  </Item>
</ItemList> 

После выполнения xslt для этого файла пример вывода выглядит следующим образом:

<kml:Placemark>
<kml:Circle cx="1" cy="2" r="3"/>
<kml:Point/>
</kml:Placemark>

<kml:Placemark>
<kml:Circle/>
<kml:Point>
<kml:coordinates>68.406180329538,35.7185924672465</kml:coordinates>
</kml:Point>
</kml:Placemark>

Мой вопрос: почему после выполнения этого xslt существуют узлы, такие как <kml:Point/> и <kml:Circle/>. Я не хочу, чтобы это избыточные узлы.

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 21 марта 2019

Это выражение XPath /ItemList/Item/cx является абсолютным путем к местоположению , и оно не зависит от узла контекста, который соответствовал правилу вашего преобразования. Короче говоря, он всегда будет выбирать одни и те же узлы, поэтому он всегда будет иметь одинаковое логическое значение.

Поскольку во входном документе есть элементы cx и Lon (в разных ветвях, но они оба существуют), содержание инструкций xsl:if будет обработано.

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