我有一个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元素之后还有任何其他节点或元素,那么它就是错误。
请提出建议。我试过兄弟功能,但没有工作。
提前致谢。
答案 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的兄弟,接收者就应该能够处理它。