我有一个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元素后面有任何其他节点或元素,那么它就是一个错误。
请提出建议。我尝试了兄弟函数,但没有工作。
这将有助于知道你在哪里做这个测试。假设您希望将此作为第一件事,同时仍然位于最顶部,请尝试如下内容:
<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>
如果 TYPE元素存在于SAMPLE/HEADER 中,且紧随其后的兄弟元素不是 RULES
,则抛出错误。请注意,在设计良好的XML中,兄弟姐妹的顺序不应该很重要;只要RULES是TYPE的兄弟,接收方就应该能够处理它。