예외가있는 빈 태그를 제거하고 싶습니다.
예외가있는 모든 빈 태그를 제거하기 위해 XSL을 만들었습니다. 아래의 XSL 다음은XSL에서 conditons가있는 모든 빈 태그를 제거하는 방법
<?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이 유지되지 않고 모든 빈 태그를 제거합니다.
누군가 나를 도울 수 있습니까?
질문을 이해할 수 없습니다. 비어있는 ' '태그 **가 삭제되지 않는 이유는 무엇입니까? 당신은 "예외가있는 모든 빈 태그를 제거하기 위해 XSL을 만들었습니다 *"라고 말합니다. 그 예외는 보이지 않습니다. 두 번째 템플릿은 ** 모든 ** 빈 태그 ** 및 ** 콘텐츠 만 '-1'인 태그도 삭제합니다. –
분명히'cEAN'과'UCOm'을 제거 할 것입니다. 속성이없고 자식 노드가없고 텍스트도 없습니다.따라서 'and'조건의 세 가지 조건이 모두 참이면 일치합니다. 아마도 그 표현의 논리를 검토하면됩니다. – Flynn1179
XSL에 새로 온 것입니다.을 제외한 모든 빈 태그를 제거하고 싶습니다. 어떻게 할 수 있는지 알고 계십니까? –