XSLT: удалить узлы с пустым определенным внуком
Я пытаюсь удалить некоторые узлы из 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 ответ
Решение
Здесь нет null
в XSLT.
Узел (текстовое значение является узлом) либо пуст, либо не существует.
Здесь пусто.
Поэтому вместо этого проверьте пустое значение:
<xsl:template match="gmd:date[gmd:CI_Date/gmd:date/gco:DateTime = '']" />
Теперь ваш gmd:date
должно быть пропало, если gco:DateTime
не имеет значения.