Функция существует в XSL When Statement - PullRequest
2 голосов
/ 12 апреля 2011

Я использую XSL когда предложение для преобразования одного файла XML в другой файл XML. Мне нужно использовать что-то вроде «существующей» функции в моем тесте когда.

Вот пример исходного XML:

<People>
    <Person personid="1" location="US" fullname="John Doe"/>
    <Person personid="2" location="US" fullname="Jane Doe"/>
</People>
<Nicknames>
    <Nickname personid="1" nname="Johnny D"/>
</Nicknames>

Вот мой пример XSL:

  <xsl:element name="HASNICKNAME">
    <xsl:choose>
        <!-- If nickname exists in source XML, return true -->
      <xsl:when test="boolean exists function"
        <xsl:text>TRUE</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>FALSE</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:element>

Может ли кто-нибудь помочь с существующей частью?

1 Ответ

2 голосов
/ 12 апреля 2011

Предположим, что переменная $personid содержит @personid из Person, который вы проверяете, тогда это только проверяет существование:

<xsl:when test="boolean(//Nickname[@personid=$personid]/@nname)">

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

<xsl:when test="normalize-space(//Nickname[@personid=$personid]/@nname)!=''">

Если вы используете клавишу типа <xsl:key name="nn" match="//Nickname" use="@personid"/>, возможно также следующее:

<xsl:when test="normalize-space(key('nn',$personid)/@nname)!=''">

Последний не нуждается в переменной $personid, но может напрямую работать с @personid Person, который вы проверяете ...

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