Обман XSL для интерпретации XML-элемента с определенным атрибутом как нулевого или пустого - PullRequest
0 голосов
/ 27 февраля 2019

Java 8 здесь, но я не думаю, что это имеет какое-либо значение, так как я считаю, что это чистый XSL-вопрос в глубине души.

У меня есть некоторый код, который создает следующий XML (в качестве примера):

<fizz>
  <account>10016</account>
  <accountId>2000001347</accountId>
  <buzz class="null"/>
</fizz>

Существует 3 возможных сценария для значения элемента buzz во время выполнения:

  • "Null Class Buzz" -> <buzz class="null"/>;или
  • "Жужжание ненулевого класса" -> <buzz class="anythingOtherThanNull"/>;или
  • «Обычное жужжание» -> <buzz><complicatedXmlStructureInsideOfHere</buzz>

Таким образом, во время выполнения мы можем иметь «Нулевой класс», «Ненулевой класс» или «Нормальный Жужж». Я не хочу преобразовывать элемент buzz в случае "Null Class Buzz". (Но я do хочу преобразовать вариации ненулевого класса Buzz и Normal Buzz.)

Вот мое XSL-преобразование:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/fizz">
      <foobar>
        <xsl:copy-of select="account"/>
        <logId><xsl:value-of select="accountId"/></logId>
        <xsl:if test="buzz">
          <FLIMFLAM SEGMENT="1">
            <HAPP>003</HAPP>
            <SADD><xsl:value-of select="buzz"/></SADD>
          </FLIMFLAM>
        </xsl:if>
      <foobar>
    </xsl:template>

</xsl:stylesheet>

Проблема заключается в том, что он преобразует варианты Bull-класса Null и выдает:

<foobar>
  <account>10016</account>
  <logId>2000001347</logId>
  <FLIMFLAM SEGMENT="1">
    <HAPP>003</HAPP>
    <SADD/>
  </FLIMFLAM>
</foobar>

Принимая во внимание, что в случаеNull Class Buzz, я хочу, чтобы buzz полностью игнорировался:

<foobar>
  <account>10016</account>
  <logId>2000001347</logId>
</foobar>

Есть идеи, как мне это сделать?Заранее спасибо!

1 Ответ

0 голосов
/ 27 февраля 2019

Как уже упоминалось в комментариях:

<xsl:if test="buzz[not(@class='null')]">

вернет true, когда есть хотя бы один элемент buzz, который не имеет атрибут class, содержащий строку "null".

...