XPATH 小筆記

Published by gleetsai on

假設有以下這份 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

Categories: Coding