XPATH 小筆記
假設有以下這份 XML 文件:
<configuration_profiles>
<size>21</size>
<configuration_profile>
<id>12</id>
<name>Connect to dedicated WiFi</name>
</configuration_profile>
<configuration_profile>
<id>7</id>
<name>Cybersec Apple TV</name>
</configuration_profile>
<configuration_profile>
<id>9</id>
<name>Cybersec SAM</name>
</configuration_profile>
<configuration_profile>
<id>8</id>
<name>Cybersec WiFi</name>
</configuration_profile>
<configuration_profile>
<id>10</id>
<name>Disable Camera</name>
</configuration_profile>
<configuration_profile>
<id>4</id>
<name>Jamf Nation iCloud Mail</name>
</configuration_profile>
<configuration_profile>
<id>31</id>
<name>Managed View ASAM</name>
</configuration_profile>
<configuration_profile>
<id>24</id>
<name>Only Setting</name>
</configuration_profile>
<configuration_profile>
<id>13</id>
<name>Wandera - Secure Mobile Gateway</name>
</configuration_profile>
<configuration_profile>
<id>35</id>
<name>yahoo</name>
</configuration_profile>
<configuration_profile>
<id>1</id>
<name>不允許特定的 App</name>
</configuration_profile>
<configuration_profile>
<id>14</id>
<name>全公司關掉 Messages</name>
</configuration_profile>
<configuration_profile>
<id>15</id>
<name>全公司關掉 Messages copy</name>
</configuration_profile>
<configuration_profile>
<id>3</id>
<name>公司資產管理</name>
</configuration_profile>
<configuration_profile>
<id>5</id>
<name>只予許特定 App</name>
</configuration_profile>
<configuration_profile>
<id>33</id>
<name>禁止變動 iPad 桌布</name>
</configuration_profile>
<configuration_profile>
<id>25</id>
<name>網站名單</name>
</configuration_profile>
<configuration_profile>
<id>2</id>
<name>關閉相機</name>
</configuration_profile>
</configuration_profiles>
選擇所有的 Name
//name/text()
開頭用 // 代表尋找整份文件裡,Node 為 name 的所有元素。如果後面加上 text() 的話,就是只要裡面的文字就好。同理,也可以換成 //id/text(),就可以拿到全部的 ID。
尋找內容是「關閉相機」的 ID
//name[text() = "關閉相機"]/preceding-sibling::id/text()
開頭一樣是尋找這份文件,多的是要確認 name 元素裡面的文字內容得是「關閉相機」。找到後,可能會特別想要這個節點裡面的 ID,因此使用 XPATH 裡面的 AXES 功能,找到同一層的哥哥 ID,並且取得裡面的文字。preceding-sibling 就是哥哥的意思,following-sibling 就是弟弟的意思。
*其實 Silbing 是指有同一個父母的元素,分成 Preceding 與 Following 只是在區分前後而已。
尋找內容有包含「http」
//string[contains(text(),’http’)]
開頭一樣是尋找文件裡所有節點是 String 的,然後找裡面文字有包含 http 的。
好用的小工具:
http://xpather.com