鉴于xml的这一部分,我需要删除任何包含xsi:nil="true"
我目前正在使用此XSL删除空白节点,因此也需要保留它。附在下面。感谢。
XML:
<ns1:EmployeeOfferAndCoverageGrp xmlns:ns1="http://tempuri.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns1:AnnualOfferOfCoverageCd>1G</ns1:AnnualOfferOfCoverageCd>
<ns1:AnnlShrLowestCostMthlyPremAmt xsi:nil="true" />
<ns1:MonthlyShareOfLowestCostMonthlyPremGrp>
<ns1:JanuaryAmt>0</ns1:JanuaryAmt>
<ns1:FebruaryAmt>0</ns1:FebruaryAmt>
<ns1:MarchAmt>0</ns1:MarchAmt>
<ns1:AprilAmt>0</ns1:AprilAmt>
<ns1:MayAmt>0</ns1:MayAmt>
<ns1:JuneAmt>0</ns1:JuneAmt>
<ns1:JulyAmt>0</ns1:JulyAmt>
<ns1:AugustAmt>0</ns1:AugustAmt>
<ns1:SeptemberAmt>0</ns1:SeptemberAmt>
<ns1:OctoberAmt>0</ns1:OctoberAmt>
<ns1:NovemberAmt>0</ns1:NovemberAmt>
<ns1:DecemberAmt>0</ns1:DecemberAmt>
</ns1:MonthlyShareOfLowestCostMonthlyPremGrp>
</ns1:EmployeeOfferAndCoverageGrp>
XSL
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="node()|SDLT">
<xsl:if test="count(descendant::text()[string-length(normalize-space(.)) > 0] | @*[string-length(.) > 0])">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:if>
</xsl:template>
<xsl:template match="@*">
<xsl:copy />
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)" />
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
鉴于您必须将名称空间添加到XML以及XSLT中
xmlns:xsi="http://some.thing" and xmlns:ns1="some.other.thing"
您只需将以下行添加到样式表中:
<xsl:template match="*[@xsi:nil = 'true']" />
如果没有名称空间,您可以从上面的表达式中省略'xsi:'。
结果:
<ns1:EmployeeOfferAndCoverageGrp xmlns:xsi="http://some.thing" xmlns:ns1="some.other.thing">
<ns1:AnnualOfferOfCoverageCd>1G</ns1:AnnualOfferOfCoverageCd>
<ns1:MonthlyShareOfLowestCostMonthlyPremGrp>
<ns1:JanuaryAmt>0</ns1:JanuaryAmt>
<ns1:FebruaryAmt>0</ns1:FebruaryAmt>
<ns1:MarchAmt>0</ns1:MarchAmt>
<ns1:AprilAmt>0</ns1:AprilAmt>
<ns1:MayAmt>0</ns1:MayAmt>
<ns1:JuneAmt>0</ns1:JuneAmt>
<ns1:JulyAmt>0</ns1:JulyAmt>
<ns1:AugustAmt>0</ns1:AugustAmt>
<ns1:SeptemberAmt>0</ns1:SeptemberAmt>
<ns1:OctoberAmt>0</ns1:OctoberAmt>
<ns1:NovemberAmt>0</ns1:NovemberAmt>
<ns1:DecemberAmt>0</ns1:DecemberAmt>
</ns1:MonthlyShareOfLowestCostMonthlyPremGrp>
</ns1:EmployeeOfferAndCoverageGrp>
答案 1 :(得分:1)
这应该让你相当远。用适当的值替换ns1
的名称空间URI。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://tempuri.org/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<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="*[@xsi:nil = 'true']" />
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)" />
</xsl:template>
</xsl:stylesheet>