Как определить, присутствует ли узел при преобразовании Xsl? - PullRequest
1 голос
/ 14 февраля 2012

Как я могу определить, присутствует ли данный узел в моем входном xml?

Если узел присутствует, я хотел бы использовать значение reportAuthor1, но в противном случае я бы использовал значение reportAuthor. Я безуспешно пытался использовать if и else.

 <xsl:choose>
 <xsl:when test="reportAuthor1=''">
 <xsl:value-of select="reportAuthor"/>
 </xsl:when>
 <xsl:otherwise>
 <xsl:value-of select="reportAuthor1"/>
 </xsl:otherwise>
 </xsl:choose>

Ответы [ 3 ]

5 голосов
/ 14 февраля 2012

Используйте not(), чтобы проверить, не существует ли узел вообще:

<xsl:choose>  
  <xsl:when test="not(reportAuthor1)">  
    <xsl:value-of select="reportAuthor"/>
  </xsl:when>  
  <xsl:otherwise>  
    <xsl:value-of select="reportAuthor1"/>  
  </xsl:otherwise>  
</xsl:choose> 
3 голосов
/ 14 февраля 2012

Это, пожалуй, самое простое и короткое однострочное выражение XPath.Используйте :

<xsl:value-of select="reportAuthor1 | reportAuthor[not(reportAuthor1)]"/>
1 голос
/ 14 февраля 2012

В этом конкретном случае вы также можете написать

<xsl:value-of select="reportAuthor1 | reportAuthor"/>

| возвращает объединение наборов, возвращаемых запросами XPath слева и справа от этого оператора, а <xsl:value-of select="somequery"/> отправит на выход значение первого узла в наборе, возвращенном somequery. Таким образом, если установлены оба значения reportAuthor1 и reportAuthor, будет выведено значение reportAuthor1; если установлено только reportAuthor, будет выведено значение reportOutput.

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