xml解析之xpath快速匹配多重篩選詳解

本文基於W3C-XPath語法:https://www.w3school.com.cn/xpath/xpath_syntax.asp

 

應用實例xml部分:

<?xml version="1.0" encoding="gb2312" ?>
<AUTO NAME="1499" TOTAL="01">
    <INIT TOTAL="02">
        <SYSTEM NO="00" NAME="BEK5" AUTOSYSID="14,34">
            <INIT_IO CMD="10" TOTAL="09" PROCEDURE="KWP2000_Init_Io">
                <STATE NO="00" NAME="BautRate" ID="01" BYTES="02">03,E8</STATE>
            </INIT_IO>
            <MESSAGEALL>
                <MESSAGE MSG_TYPE="00" CS_MODE="00" OVERTIME="03,E8" />
            </MESSAGEALL>
            <INIT_ECU TOTAL="01" PROCEDURE="B2K_Init_ECU" SPY="01">
                <PROTOCOL NO="00" TOTAL="05">
                    <COMMAND NO="04" CMD="30" RWAYS="01" SEED="6a" LEN="04" POS="02">
                        <MESSAGE LEN="06">27,0A,00,00,00,00</MESSAGE>
                    </COMMAND>
                </PROTOCOL>
                <SPY NO="00" TOTAL="08">
                    <COMLIST NO="00" TOTAL="01">
                        <LIST NO="00" CMD="01" POS="08" XBIT="03" REC="00" />
                    </COMLIST>
                </SPY>
            </INIT_ECU>
        </SYSTEM>
        <SYSTEM NO="00" NAME="BEK5" AUTOSYSID="14,34">
            <INIT_IO CMD="10" TOTAL="09" PROCEDURE="KWP2000_Init_Io">
                <STATE NO="00" NAME="BautRate" ID="01" BYTES="02">03,E8</STATE>
            </INIT_IO>
            <MESSAGEALL>
                <MESSAGE MSG_TYPE="00" CS_MODE="00" OVERTIME="03,E8" />
            </MESSAGEALL>
            <INIT_ECU TOTAL="01" PROCEDURE="B2K_Init_ECU" SPY="01">
                <PROTOCOL NO="00" TOTAL="05">
                    <COMMAND NO="04" CMD="30" RWAYS="01" SEED="6a" LEN="04" POS="02">
                        <MESSAGE LEN="06">27,0A,00,00,00,00</MESSAGE>
                    </COMMAND>
                </PROTOCOL>
                <SPY NO="00" TOTAL="08"> 
                    <COMMAND NO="03" CMD="FF" NUM="00" LEN="03" WAYS="01" STATE="00,03,04,07">
                        
                        <MESSAGE LEN="06">35,30,30,00,00,00</MESSAGE>
                    </COMMAND>
                </SPY>
            </INIT_ECU>
        </SYSTEM>
    </INIT>
</AUTO>

 應用實例代碼:

xml.xpath("/AUTO/INIT//SYSTEM/INIT_ECU//PROTOCOL//COMMAND[MESSAGE[starts-with(text(),'27')]]")

解析:

表達式 描述
/ 從根節點選取。篩選首個節點
// 從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。篩選所有對應節點
[condition] 按條件condition篩選
starts-with(text(),str) 匹配節點值開始字符爲str的節點

片段解釋: 

/AUTO/INIT//SYSTEM/INIT_ECU//PROTOCOL 
解釋:篩選AUTO標籤 下INIT標籤 下所有SYSTEM標籤 下的INIT_ECU標籤下的所有PROTOCOL標籤

//COMMAND[MESSAGE[starts-with(text(),'27')]]

解釋:篩選子標籤MESSAGE標籤值開始字符爲27的所有COMMAND標籤

 

篩選結果:

<COMMAND NO="04" CMD="30" RWAYS="01" SEED="6a" LEN="04" POS="02">
         <MESSAGE LEN="06">27,0A,00,00,00,00</MESSAGE>
</COMMAND>

 

<COMMAND NO="04" CMD="30" RWAYS="01" SEED="6a" LEN="04" POS="02">
          <MESSAGE LEN="06">27,0A,00,00,00,00</MESSAGE>
</COMMAND>

 


 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章