如何在xslt 1.0中检查节点是否在错误/正确的位置?

时间:2014-05-13 07:27:54

标签: xpath xslt-1.0

我有一个XML文件:

<SAMPLE>
    <HEADER>
        <INV_ID>23</INV_ID>
        <PROCESS_CODE>00</PROCESS_CODE>
        <DATE>1234567</DATE>
        <TYPE>00</TYPE>
        <RULES>
            <ACTION>00</ACTION>
        </RULES>
    </HEADER>
</SAMPLE>

我只想检查<TYPE>元素的下一个节点应该是<RULES>。如果不是那么我只想打印错误消息。例如,如果在TYPE元素之后还有任何其他节点或元素,那么它就是错误。

请提出建议。我试过兄弟功能,但没有工作。

提前致谢。

1 个答案:

答案 0 :(得分: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:template match="/">
    <xsl:choose>
        <xsl:when test="SAMPLE/HEADER/TYPE and not(SAMPLE/HEADER/TYPE[following-sibling::*[1][self::RULES]])">
            <error>error message</error>
        </xsl:when>
        <xsl:otherwise>
            <!-- continue -->
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

</xsl:stylesheet>

这会引发错误如果在SAMPLE / HEADER 中存在TYPE元素,则其紧随其后的兄弟 RULES

请注意,在设计良好的XML中,兄弟姐妹的顺序不应该很重要;只要RULES是TYPE的兄弟,接收者就应该能够处理它。