# FILTERXML

## Content

**FILTERXML** 함수는 지정된 XPath 식을 사용하여 XML 콘텐츠에서 특정 데이터를 반환합니다.
이 함수는 유효한 XML 형식 문자열에서 요소 값, 특성 값 또는 필터링된 XML 데이터를 추출하는 데 사용할 수 있습니다.

## 구문

```javascript
=FILTERXML(xml, xpath)
```

## 인수

| 매개 변수 | 설명 |
| --------- | ----------- |
| `xml` | 유효한 XML 형식 문자열 또는 XML 콘텐츠가 포함된 셀 참조입니다. |
| `xpath` | XML 콘텐츠에서 추출할 데이터를 지정하는 표준 XPath 형식 문자열입니다. |

## 설명

* `FILTERXML`은 지정된 XPath 식과 일치하는 데이터를 반환합니다.
* XML 문자열이 유효하지 않으면 `FILTERXML`은 `#VALUE!` 오류 값을 반환합니다.
* XML 문자열에 잘못된 접두사가 있는 네임스페이스가 포함되어 있으면 `FILTERXML`은 `#VALUE!` 오류 값을 반환합니다.
* XPath 식이 유효하지 않거나 일치하는 데이터를 찾을 수 없으면 `FILTERXML`은 `#VALUE!` 오류 값을 반환합니다.
* 결과에 여러 값이 포함된 경우 결과는 SpreadJS의 동적 배열 또는 배열 수식 동작을 따릅니다.

## 예제

### XML에서 요소 값 추출

셀 `A1`에 다음 XML 문자열이 포함되어 있다고 가정합니다.

```xml
<bookstore>
  <book><title>Harry Potter</title><price>29.99</price></book>
  <book><title>Learning XML</title><price>39.95</price></book>
  <book><title>XQuery Kick Start</title><price>49.99</price></book>
</bookstore>
```

| 수식 | 결과 | 설명 |
| ------- | ------ | ----------- |
| `=FILTERXML(A1,"//title")` | `{"Harry Potter"; "Learning XML"; "XQuery Kick Start"}` | 모든 `<title>` 요소 값을 반환합니다. |
| `=FILTERXML(A1,"//book[1]/title")` | `Harry Potter` | 첫 번째 책의 제목을 반환합니다. |
| `=FILTERXML(A1,"//book[last()]/title")` | `XQuery Kick Start` | 마지막 책의 제목을 반환합니다. |
| `=FILTERXML(A1,"//book/price")` | `{29.99; 39.95; 49.99}` | 모든 `<price>` 요소 값을 반환합니다. |
| `=FILTERXML(A1,"//book[price>30]/title")` | `{"Learning XML"; "XQuery Kick Start"}` | 가격이 30보다 큰 책의 제목을 반환합니다. |

### 특성을 사용하여 데이터 추출

셀 `A1`에 다음 XML 문자열이 포함되어 있다고 가정합니다.

```xml
<catalog>
  <product id="1" category="electronics">Laptop</product>
  <product id="2" category="electronics">Phone</product>
  <product id="3" category="clothing">T-Shirt</product>
</catalog>
```

| 수식 | 결과 | 설명 |
| ------- | ------ | ----------- |
| `=FILTERXML(A1,"//product/@id")` | `{1; 2; 3}` | 모든 `id` 특성 값을 반환합니다. |
| `=FILTERXML(A1,"//product[@category='electronics']")` | `{"Laptop"; "Phone"}` | `electronics` 범주의 제품을 반환합니다. |
| `=FILTERXML(A1,"//product[@id='2']")` | `Phone` | `id="2"`인 제품을 반환합니다. |

### XPath 함수를 사용하여 텍스트 추출

셀 `A1`에 다음 XML 문자열이 포함되어 있다고 가정합니다.

```xml
<employees>
  <employee><name>Alice</name><dept>Engineering</dept></employee>
  <employee><name>Bob</name><dept>Marketing</dept></employee>
  <employee><name>Charlie</name><dept>Engineering</dept></employee>
</employees>
```

| 수식 | 결과 | 설명 |
| ------- | ------ | ----------- |
| `=FILTERXML(A1,"//employee[contains(name,'li')]/name")` | `{"Alice"; "Charlie"}` | `li`가 포함된 이름을 반환합니다. |

### WEBSERVICE와 함께 FILTERXML 사용

`FILTERXML`을 **WEBSERVICE** 함수와 함께 사용하여 URL에서 반환된 XML에서 데이터를 추출할 수 있습니다.

```javascript
=FILTERXML(WEBSERVICE("https://example.com/data.xml"),"//item/name")
```

이 수식은 먼저 **WEBSERVICE**를 사용하여 지정된 URL에서 XML 데이터를 다운로드한 다음, `FILTERXML`을 사용하여 `<item>` 아래의 모든 `<name>` 요소를 추출합니다.
일치하는 값이 여러 개 발견되면 결과는 SpreadJS의 동적 배열 또는 배열 수식 동작을 따릅니다.

## 참고

* `FILTERXML`은 XPath 식을 사용하여 XML 콘텐츠에서 데이터를 찾습니다.
* 결과에 여러 값이 포함된 경우 수식 모드 및 동적 배열 동작에 따라 값이 여러 셀로 분산될 수 있습니다.
* SpreadJS에는 Excel과 동일한 32,767자 셀 문자열 제한이 없습니다. Excel에서 긴 XML 문자열이 잘리거나 긴 **WEBSERVICE** 응답에 대해 `#VALUE!`을 반환하는 경우에도 XML 콘텐츠가 완전하고 유효하다면 SpreadJS에서는 유효한 결과를 반환할 수 있습니다.