Существуют различные возможные определения того, что может означать «пустой элемент» .
Давайте определим пустой элемент как элемент, который не имеет никакого элементаузлы-потомки, строковое значение которых является пустой строкой или состоит только из символов пробела ('', CR, NL).
Затем, чтобы проверить, является ли данный элемент пустым, используйте :
not(*) and not(normalize-space())
Предполагается, что элемент является узлом контекста, когда вычисляется выражение XPath.
В этом случае я получаю "ENTER" или "\ r \ n«для № 1.Я хочу написать XSLT, чтобы проверить, содержит ли узел «ENTER» или «\ r \ n», а затем заменить его.
Вы не указали, чем этот текстовый узел должен быть заменен, поэтому в этомРешение Я предполагаю, что текстовый узел должен быть заменен пустой строкой (удалено):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(*) and not(normalize-space())]">
<xsl:element name="{name()}" namespace="{namespace-uri()}"/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к предоставленному документу XML:
<ns0:Root xmlns:ns0="http://Map_Sample.Input_Schema">
<Number1>
</Number1>
<Number2>11</Number2>
<Number3>12</Number3>
</ns0:Root>
желаемый результат получается :
<ns0:Root xmlns:ns0="http://Map_Sample.Input_Schema">
<Number1/>
<Number2>11</Number2>
<Number3>12</Number3>
</ns0:Root>