通过XSLT从XML中删除空标签
发布时间:2020-12-16 07:41:36 所属栏目:百科 来源:网络整理
导读:我有一个xml的以下模式 ?xml version="1.0" encoding="UTF-8"? Person FirstNameAhmed/FirstName MiddleName/ LastNameAboulnaga/LastName CompanyInfo CompanyNameIPN Web/CompanyName Title/ Role/Role Department /Department /CompanyInfo /Person 我尝
我有一个xml的以下模式
<?xml version="1.0" encoding="UTF-8"?> <Person> <FirstName>Ahmed</FirstName> <MiddleName/> <LastName>Aboulnaga</LastName> <CompanyInfo> <CompanyName>IPN Web</CompanyName> <Title/> <Role></Role> <Department> </Department> </CompanyInfo> </Person> 我尝试删除空标签时使用了以下xslt(从论坛获取) <xsl:template match="@*|node()"> <xsl:if test=". != '' or ./@* != ''"> <xsl:copy> <xsl:copy-of select = "@*"/> <xsl:apply-templates /> </xsl:copy> </xsl:if> 所使用的xslt成功地删除标签 <Title/> <Role></Role> …但是当空标签位于两行时失败,例如: <Department> </Department> 有没有解决这个问题?
此转换根本不需要任何条件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()|@*"/> </xsl:copy> </xsl:template> <xsl:template match= "*[not(@*|*|comment()|processing-instruction()) and normalize-space()='' ]"/> </xsl:stylesheet> 当应用于提供的XML文档时: <Person> <FirstName>Ahmed</FirstName> <MiddleName/> <LastName>Aboulnaga</LastName> <CompanyInfo> <CompanyName>IPN Web</CompanyName> <Title/> <Role></Role> <Department> </Department> </CompanyInfo> </Person> 它产生想要的,正确的结果: <Person> <FirstName>Ahmed</FirstName> <LastName>Aboulnaga</LastName> <CompanyInfo> <CompanyName>IPN Web</CompanyName> </CompanyInfo> </Person> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |