如何在XSLT中排除多个XML节点?

时间:2013-05-20 17:32:10

标签: xml xslt

我正在尝试使用XSLT将XML文档转换为HTML。

该文件是外部的,没有完整记录。为此,我只知道(并因此处理)一些节点。

可以添加新节点。

我想首先确定是否有任何未知的子节点,如果是,则只在HTML表格中显示它们。没什么好看的。

我当前的xslt片段是......

<xsl:if test="*[not(service or searchtext or clientreference or threshold or resultcount or results or options or error)]">
<div class="requestSupportData">
    <table class="zebra">
        <caption>Request supportive data</caption>
        <thead>
            <tr>
                <th>Element</th>
                <th>Value</th>
            </tr>
        </thead>
        <tfoot>
            <tr>
                <th colspan="2">
                    <a href="#top">Top</a>
                </th>
            </tr>
        </tfoot>
        <tbody>
            <xsl:for-each select="*[not(service or searchtext or clientreference or threshold or resultcount or results or options or error)]">
                <tr>
                    <th>
                        <xsl:value-of select="local-name(.)"/>
                    </th>
                    <td>
                        <xsl:value-of select="."/>
                    </td>
                </tr>
            </xsl:for-each>
        </tbody>
    </table>
</div>

我在这里想要实现的是没有任何节点不称为服务,搜索文本等等,因此,将它们渲染为HTML表格中的简单名称/值对。

我要么一无所获,要么包括不需要的元素。

此致

理查德。

1 个答案:

答案 0 :(得分:3)

这个表达式:

 *[not(service or searchtext or clientreference or ...)]

表示“所有没有子元素的子元素名为<service><searchtext>等。”将其更改为

 *[not(self::service or self::searchtext or self::clientreference or ...)]

表示“所有名为<service><searchtext>等的子元素”。