XSLT: удалить узлы с пустым определенным внуком - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь удалить некоторые узлы из XML с помощью XSLT.

Часть преобразования выглядит следующим образом:

<xsl:template match="gmd:date[gmd:CI_Date/gmd:date/gco:DateTime = null]" />

... и XML выглядит так:

<gmd:MD_Metadata ... >
  ...
  <gmd:identificationInfo>
    <gmd:MD_DataIdentification>
      <gmd:citation>
        <gmd:CI_Citation>
          ...
          <gmd:date>
            <gmd:CI_Date>
              <gmd:date>
                <gco:DateTime />
              </gmd:date>
              ...
            </gmd:CI_Date>
          </gmd:date>
          ...
        </gmd:CI_Citation>
        ...
      </gmd:citation>
    </gmd:MD_DataIdentification>
  </gmd:identificationInfo>
</gmd:MD_Metadata>

Согласно тому, что я знаю о XSLT (не так много), преобразование должно совпадать с пустым правнуком.Но это не так.Шаблон не соответствует и преобразование ничего не делает.Я пробовал разные вещи (совпадение с 0, дата по умолчанию, сравнение с текстом ()) ... ничего не работает.

Есть какие-нибудь подсказки?

1 Ответ

0 голосов
/ 21 декабря 2018

В XSLT нет null.
Узел (текстовое значение является узлом) либо пуст, либо не существует.

Здесь оно пустое.
Так что вместо этого проверьте пустое значение:

<xsl:template match="gmd:date[gmd:CI_Date/gmd:date/gco:DateTime = '']" />

Теперь ваш gmd:date должен исчезнуть, если gco:DateTime не имеет значения.

...