如果XML中的子项为空,则替换父节点

时间:2018-01-03 14:02:25

标签: xml xslt xslt-1.0

文本XML标记中有一个tbody,可以在XML文档中的任何位置。如果tbody为空,我想要替换没有可用的数据

Model.DbMeta

所以输出应该是

class DatabaseOptions(object):

    def __init__(self, opts):
        if opts:
            for key in dir(opts):
                if not key.startswith('__'):
                    val = getattr(opts, key, None)
                    if not callable(val):
                        setattr(self, key, val)

1 个答案:

答案 0 :(得分:0)

在节点text内使用验证,请参阅下面的XSL:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
  <xsl:strip-space elements="*"/>  
  <xsl:output method="xml" indent="yes"/>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <!--perform validation in required node-->
    <xsl:template match="text">        
            <xsl:choose>
                <!--in case when tbody has some text then normally copy it-->
                <xsl:when test="string-length(normalize-space(//tbody/text())) &gt;0">
                        <xsl:copy-of select="."/>
                </xsl:when>
                <!--in case when tbody has not any text node text will have text - no data available-->
                <xsl:otherwise>
                    <xsl:element name="{name()}">
                        <xsl:text>&#xa;    no data available&#xa;</xsl:text>
                    </xsl:element>
                </xsl:otherwise>
            </xsl:choose>                                                                  
    </xsl:template>
</xsl:stylesheet>

如果XML如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <title>Payers</title>
        <text>
            <table border="1" width="100%">
                <thead>
                    <tr>
                        <th>Payer Name</th>
                        <th>Policy Type</th>
                        <th>Policy Number</th>
                        <th>Effective Date</th>
                        <th>Expiration Date</th>
                    </tr>
                </thead>
                <tbody/>
            </table>
        </text>
</root>

结果如下:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<title>Payers</title>
<text>
    no data available
</text>
</root>

希望它对您的案件有所帮助。