【发布时间】:2015-02-07 03:16:02
【问题描述】:
我想删除有异常的空标签。
我制作了一个 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 遵循以下规则时,就不行了。
<?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 没有被保留,它会删除所有空标签。
有人可以帮助我吗?
【问题讨论】:
-
我不明白你的问题。为什么要删除空的
<cEAN/>标签not?你说“我创建了一个 XSL 来删除所有空标签,但有例外”。我没有看到那个例外。您的第二个模板删除了 all 空标签 和 也删除了唯一内容为“-1”的标签。 -
这显然会删除
cEAN和uCOm。它们没有属性,没有子节点,也没有文本。因此,您的“和”条件中的所有三个条件都为真,并且它将匹配。您可能只需要查看该表达式的逻辑。 -
我是 XSL 新手,我想删除除
之外的所有空白标签你知道我该怎么做吗?
标签: xml xslt tags conditional-statements xml-namespaces