我想删除空标签,例外 我创建了一个XSL来删除所有空标记异常。遵循以下XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:preserve-space elements="cEAN"/ priority="1">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(@*) and not(*) and (not(text()) or .=-1)]"/>
</xsl:stylesheet>
当遵循以下规则的XML时,它工作正常,
<?xml version="1.0" encoding="utf-8"?>
<NFe xmlns:n0="http://mynamespace">
<cProd>0000000000001</cProd>
<cEAN> </cEAN>
<xProd>ARV NAT</xProd>
<NCM>01000</NCM>
<CFOP>9999</CFOP>
</uCom>
</Nfe>
转换XML:
<?xml version="1.0" encoding="UTF-8"?>
<NFe xmlns:n0="http://mynamespace">
<cProd>0000000000001</cProd>
<cEAN />
<xProd>ARV NAT</xProd>
<NCM>01000</NCM>
<CFOP>9999</CFOP>
</NFe>
但是当遵循以下规则的XML时,Isn才能工作。
<?xml version="1.0" encoding="utf-8"?>
<NFe xmlns:n0="http://mynamespace">
<cProd>0000000000001</cProd>
<cEAN/>
<xProd>ARV NAT</xProd>
<NCM>01000</NCM>
<CFOP>999</CFOP>
<uCom/>
</Nfe>
转换XML:
<?xml version="1.0" encoding="UTF-8"?>
<NFe xmlns:n0="http://mynamespace">
<cProd>0000000000001</cProd>
<xProd>ARV NAT</xProd>
<NCM>01000</NCM>
<CFOP>9999</CFOP>
</NFe>
标签cEAN不会被保留,并且会删除所有空标签。
有人可以帮助我吗?
答案 0 :(得分:0)
首先,您需要更正XML才有效。我希望,<cEAN/>
</cEAN>
是@priority
,因为我没有看到任何开始标记。
xsl:preserve-space
元素中没有cEAN
。
如果我的假设是正确的,那就是预期的行为。
像下面这样的元素意味着有一个文本节点,其值为空格(
<cEAN> </cEAN>
)。
<cEAN/>
和
cEAN
表示元素<cEAN/>
中包含空值(没有文本节点,没有子元素)。 <cEAN></cEAN>
与<xsl:template match="*[not(@*) and not(*) and (not(text()) or .=-1)]"/>
相同。
样式表中的模板:
<cEAN/>
匹配cEAN
,因此在输出中省略,因为模板不执行任何操作。
要删除除<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[. = '' and not(self::cEAN)]"/>
</xsl:stylesheet>
元素之外的所有空元素,可以使用以下样式表:
<NFe>
<cEAN/>
<CFOP>9999</CFOP>
<empty/>
</NFe>
如果您的输入符合XML:
<?xml version="1.0" encoding="utf-8"?>
<NFe>
<cEAN/>
<CFOP>9999</CFOP>
</NFe>
输出结果为:
{{1}}