Pymac 2023. 12. 9. 03:46
반응형

XPath 문법과 예제.

### 예제 HTML:

```html
<div>
  <p>This is some text.</p>
  <table>
    <tr>
      <td class="special">Special Text</td>
      <td>
        <span>Inside Span</span>
        <button type="submit">Submit Button</button>
      </td>
    </tr>
  </table>
</div>
<section>
  <div>
    <p>Another text</p>
    <div class="nested">
      <span>Nested Span</span>
      <button type="button">Nested Button</button>
    </div>
  </div>
</section>
```

### XPath 문법 설명:

#### 첫 번째 조건:

1. `//div/p[contains(text(), "text")]`:
   - `//div`: 문서 전체에서 "div" 태그를 선택합니다.
   - `/p`: 선택된 "div" 태그의 하위 "p" 태그를 선택합니다.
   - `contains(text(), "text")`: 선택된 "p" 태그의 텍스트가 "text"를 포함하는지 확인합니다.

2. `/../table//td[@class="special" and descendant::button[contains(text(), "Submit") and descendant::span[contains(text(), "Inside Span")]]]`:
   - `/../`: 선택된 "p" 태그의 상위 "div" 태그를 선택합니다.
   - `table//td`: 상위 "div" 태그 하위의 "table" 태그에서 "td" 태그를 선택합니다.
   - `[@class="special" and descendant::button[contains(text(), "Submit") and descendant::span[contains(text(), "Inside Span")]]]`:
     - `@class="special"`: 선택된 "td" 태그의 클래스가 "special"이어야 합니다.
     - `descendant::button[contains(text(), "Submit") and descendant::span[contains(text(), "Inside Span")]]`:
       - `descendant::button`: "td" 태그의 자손 중 "button" 태그를 선택합니다.
       - `contains(text(), "Submit")`: 선택된 "button" 태그의 텍스트가 "Submit"을 포함하는지 확인합니다.
       - `descendant::span[contains(text(), "Inside Span")]`: "button" 태그의 자손 중 "span" 태그를 선택하고, "span" 태그의 텍스트가 "Inside Span"을 포함하는지 확인합니다.

#### 두 번째 조건:

1. `//section/div/p[contains(text(), "Another text")]`:
   - `//section/div`: 문서 전체에서 "section" 태그의 하위 "div" 태그를 선택합니다.
   - `/p`: 선택된 "div" 태그의 하위 "p" 태그를 선택합니다.
   - `contains(text(), "Another text")`: 선택된 "p" 태그의 텍스트가 "Another text"를 포함하는지 확인합니다.

2. `/div[@class="nested" and descendant::button[@type="button" and descendant::span[contains(text(), "Nested Span")]]]`:
   - `/div`: 선택된 "p" 태그의 상위 "div" 태그를 선택합니다.
   - `[@class="nested" and descendant::button[@type="button" and descendant::span[contains(text(), "Nested Span")]]]`:
     - `@class="nested"`: 선택된 "div" 태그의 클래스가 "nested"이어야 합니다.
     - `descendant::button[@type="button" and descendant::span[contains(text(), "Nested Span")]]`:
       - `descendant::button`: "div" 태그의 자손 중 "button" 태그를 선택합니다.
       - `[@type="button" and descendant::span[contains(text(), "Nested Span")]]`:
         - `@type="button"`: 선택된 "button" 태그의 타입이 "button"이어야 합니다.
         - `descendant::span[contains(text(), "Nested Span")]`: "button" 태그의 자손 중 "span" 태그를 선택하고, "span" 태그의 텍스트가 "Nested Span"을 포함하는지 확인합니다.

반응형