XSLT1.0:需要消除具有空字段的记录
XSLT1.0: Need to eliminate records which is having empty fields
专家们,我需要编写 XSLT 1.0 代码来消除 XML 中具有空字段的记录。
输入:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ns0:Accounts xmlns:ns0="urn:text.com:accounts">
<Recordset>
<Record>
<FIELD1>123</FIELD1>
<FIELD2/>
<FIELD3/>
<FIELD4>2020</FIELD4>
<FIELD5/>
</Record>
<Record>
<FIELD1/>
<FIELD2/>
<FIELD3/>
<FIELD4/>
<FIELD5/>
</Record>
<Record>
<FIELD1>89</FIELD1>
<FIELD2>098</FIELD2>
<FIELD3/>
<FIELD4>678</FIELD4>
<FIELD5>NEW</FIELD5>
<FIELD6/>
</Record>
<Record>
<FIELD1/>
<FIELD2/>
<FIELD3/>
<FIELD4/>
<FIELD5/>
</Record>
<Record>
<FIELD1/>
<FIELD2/>
<FIELD3/>
<FIELD4/>
<FIELD5/>
</Record>
</Recordset>
</ns0:Accounts>
** 期望输出:**
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ns0:Accounts xmlns:ns0="urn:text.com:accounts">
<Recordset>
<Record>
<FIELD1>123</FIELD1>
<FIELD2/>
<FIELD3/>
<FIELD4>2020</FIELD4>
<FIELD5/>
</Record>
<Record>
<FIELD1>89</FIELD1>
<FIELD2>098</FIELD2>
<FIELD3/>
<FIELD4>678</FIELD4>
<FIELD5>NEW</FIELD5>
<FIELD6/>
</Record>
</Recordset>
</ns0:Accounts>
** XSLT 我试过:**
<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()[boolean(normalize-space())]
|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
此 XSLT 删除所有记录中的空字段,但我的要求是删除包含所有空字段的记录。如果记录包含一个具有某个值的字段,那么我们需要保持该记录原样。请支持..
这是您可以查看的一种方式:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Record[not(*/text())]"/>
</xsl:stylesheet>
这是另一个:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:copy>
<Recordset>
<xsl:copy-of select="Recordset/Record[*/text()]"/>
</Recordset>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
专家们,我需要编写 XSLT 1.0 代码来消除 XML 中具有空字段的记录。
输入:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ns0:Accounts xmlns:ns0="urn:text.com:accounts">
<Recordset>
<Record>
<FIELD1>123</FIELD1>
<FIELD2/>
<FIELD3/>
<FIELD4>2020</FIELD4>
<FIELD5/>
</Record>
<Record>
<FIELD1/>
<FIELD2/>
<FIELD3/>
<FIELD4/>
<FIELD5/>
</Record>
<Record>
<FIELD1>89</FIELD1>
<FIELD2>098</FIELD2>
<FIELD3/>
<FIELD4>678</FIELD4>
<FIELD5>NEW</FIELD5>
<FIELD6/>
</Record>
<Record>
<FIELD1/>
<FIELD2/>
<FIELD3/>
<FIELD4/>
<FIELD5/>
</Record>
<Record>
<FIELD1/>
<FIELD2/>
<FIELD3/>
<FIELD4/>
<FIELD5/>
</Record>
</Recordset>
</ns0:Accounts>
** 期望输出:**
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ns0:Accounts xmlns:ns0="urn:text.com:accounts">
<Recordset>
<Record>
<FIELD1>123</FIELD1>
<FIELD2/>
<FIELD3/>
<FIELD4>2020</FIELD4>
<FIELD5/>
</Record>
<Record>
<FIELD1>89</FIELD1>
<FIELD2>098</FIELD2>
<FIELD3/>
<FIELD4>678</FIELD4>
<FIELD5>NEW</FIELD5>
<FIELD6/>
</Record>
</Recordset>
</ns0:Accounts>
** XSLT 我试过:**
<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()[boolean(normalize-space())]
|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
此 XSLT 删除所有记录中的空字段,但我的要求是删除包含所有空字段的记录。如果记录包含一个具有某个值的字段,那么我们需要保持该记录原样。请支持..
这是您可以查看的一种方式:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Record[not(*/text())]"/>
</xsl:stylesheet>
这是另一个:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:copy>
<Recordset>
<xsl:copy-of select="Recordset/Record[*/text()]"/>
</Recordset>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>