Все,
Я использовал очень простую таблицу стилей в самом конце этого поста, чтобы удалить пустые узлы элементов из записей XML.XSLT выполняет свою работу адекватно, но записи XML фактически содержат буквальные «нулевые» значения в некоторых элементах, которые таблица стилей не удаляет.Пример:
<marc:datafield tag="400" ind1="1" ind2=" ">
<marc:subfield code="a">null</marc:subfield>
<marc:subfield code="q">null</marc:subfield>
<marc:subfield code="d"></marc:subfield>
</marc:datafield>
Я удалил эти "пустые" вручную с помощью поиска и замены до запуска XSLT, процедуры, которая работает достаточно хорошо - но было бы более разумно иметь XSLTСам удалить эти значения, а также любые пустые узлы.Другими словами, я хотел бы выделить узлы, которые содержат «ноль»
<marc:subfield code="q">null</marc:subfield>
И такие узлы, как
<marc:subfield code="q"></marc:subfield>
, чтобы весь блок узлов представлен в верхнем примерев этом сообщении полностью исчезает.
Непосредственно ниже XSLT удаляет узлы с буквальным значением "null", но оставляет пустые узлы на месте.Мне нужно, чтобы XSLT делал обе вещи одновременно: удалял буквальные «нулевые» значения и содержащие их узлы, а также пустые узлы.Я пытался выполнить условие «выбери другое», но оно не работает.
<xsl:strip-space elements="*"/>
<xsl:template match="*[not(node())]"/>
<xsl:template match="node()|@*">
<xsl:if test="(. != '') and (. != 'null')">
<xsl:copy>
<xsl:apply-templates select="node()[normalize-space()]|@*"/>
</xsl:copy>
</xsl:if>
</xsl:template>
Любая помощь, которую ты мог бы предложить, была бы чрезвычайно, очень признательна.
С уважением и большое спасибо -
Сед В.
ОРИГИНАЛ XSLT:
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" media-type="text/xml"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*[not(node())]"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()[normalize-space()]|@*"/>
</xsl:copy>
</xsl:template>