> 백엔드 개발 > PHP 튜토리얼 > PHP DOM : XPath 사용

PHP DOM : XPath 사용

尊渡假赌尊渡假赌尊渡假赌
풀어 주다: 2025-02-26 09:07:16
원래의
518명이 탐색했습니다.

PHP DOM: Using XPath

코어 포인트

XPath는 기능을 작성하는 더 간단하고 깨끗한 방법을 제공하고 쿼리를 작성하고 XML 데이터를 필터하는 데 필요한 코드의 양을 줄이는 XML 문서를 쿼리하기위한 구문입니다.

xpath 쿼리는 와 라는 두 가지 함수를 사용하여 수행 할 수 있습니다. 두 가지 모두 쿼리를 수행하지만 차이점은

를 사용할 수 있으며 사각형 브래킷의 노드 값을 비교할 수 있으며, "/.."는 부모 요소를 원한다는 것을 의미합니다 (즉, 하나의 노드를 위쪽으로 이동). XPath 쿼리는 두 가지 함수 중 하나를 사용하여 수행 할 수 있습니다. 둘 다 쿼리를 수행하지만 차이점은 반환 결과 유형입니다. 는 항상

를 반환하고
<!DOCTYPE library [
  <!ELEMENT library (book*)>
  <!ELEMENT book (title, author, genre, chapter*)>
  <!ATTLIST book isbn ID #REQUIRED>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT genre (#PCDATA)>
  <!ELEMENT chapter (chaptitle,text)>
  <!ATTLIST chapter position NMTOKEN #REQUIRED>
  <!ELEMENT chaptitle (#PCDATA)>
  <!ELEMENT text (#PCDATA)>
]>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
는 가능한 한 입력 된 결과를 반환합니다. 예를 들어, XPath Query가 실제 책 자체가 아닌 특정 저자가 작성한 책 수를 반환하면
<?xml version="1.0" encoding="utf-8"?>
<library>
  <book isbn="isbn1234">
    <title>A Book</title>
    <author>An Author</author>
    <genre>Horror</genre>
    <chapter position="first">
      <chaptitle>chapter one</chaptitle>
      <text></text>
    </chapter>
  </book>
  <book isbn="isbn1235">
    <title>Another Book</title>
    <author>Another Author</author>
    <genre>Science Fiction</genre>
    <chapter position="first">
      <chaptitle>chapter one</chaptitle>
      <text>Sit Dolor Amet...</text>
    </chapter>
  </book>
</library>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
는 <🎜 🎜>를 반환합니다. 는 번호를 직접 반환하므로 노드에서 데이터를 추출하지 않고도 즉시 사용할 수 있습니다.

<🎜 🎜> <<> XPath의 코드 및 속도 장점 <🎜 🎜> 특정 저자가 쓴 책 수를 반환하면서 빠른 시연을하자. 먼저 실행 가능한 접근 방식을 살펴 보지만 XPath를 사용하지 않습니다. 이것은 XPath를 사용하지 않고이 작업을 수행하는 방법과 XPath가 왜 그렇게 강력한 지 보여주는 것입니다.

다음 방법은 동일한 결과를 달성하지만 XPath를 사용하여 특정 저자가 작성한 책을 선택합니다.
<!DOCTYPE library [
  <!ELEMENT library (book*)>
  <!ELEMENT book (title, author, genre, chapter*)>
  <!ATTLIST book isbn ID #REQUIRED>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT genre (#PCDATA)>
  <!ELEMENT chapter (chaptitle,text)>
  <!ATTLIST chapter position NMTOKEN #REQUIRED>
  <!ELEMENT chaptitle (#PCDATA)>
  <!ELEMENT text (#PCDATA)>
]>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
이번에는 PHP가 저자 값을 테스트 할 필요가 없음에 유의하십시오. 그러나 한 걸음 더 나아가 XPath 함수

를 사용 하여이 경로의 발생 수를 계산할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<library>
  <book isbn="isbn1234">
    <title>A Book</title>
    <author>An Author</author>
    <genre>Horror</genre>
    <chapter position="first">
      <chaptitle>chapter one</chaptitle>
      <text></text>
    </chapter>
  </book>
  <book isbn="isbn1235">
    <title>Another Book</title>
    <author>Another Author</author>
    <genre>Science Fiction</genre>
    <chapter position="first">
      <chaptitle>chapter one</chaptitle>
      <text>Sit Dolor Amet...</text>
    </chapter>
  </book>
</library>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
우리는 PHP를 사용하여 힘든 필터링을 수행 할 필요없이 필요한 정보를 검색하기 위해 XPath의 한 줄만 필요합니다. 사실, 이것은이 기능을 작성하는 더 쉽고 간결한 방법입니다! 는 마지막 예제에서 사용됩니다. 함수 가 입력 된 결과를 반환하기 때문입니다.

를 사용하면 count()가 반환되지만 빈 목록이라는 것을 알 수 있습니다. 이것은 코드를 더 간결하게 만들뿐만 아니라 속도의 장점도 있습니다. 버전 1은 버전 2보다 평균 속도가 30% 더 빠르지 만 버전 3은 버전 2보다 약 10% 빠릅니다 (버전 1보다 약 15% 더 빠릅니다). 이러한 측정은 서버와 쿼리에 따라 다르지만 순수한 XPath를 사용하면 상당한 속도 이점을 가져 오는 동시에 코드를 쉽게 읽고 유지 관리 할 수 ​​있습니다.

//library/book
로그인 후 복사
로그인 후 복사
<<> xpath 함수

<🎜 🎜> xpath는 많은 기능을 사용할 수 있으며 사용 가능한 기능을 자세히 설명하는 많은 우수한 리소스가 있습니다. 자신이 <🎜 🎜>를 반복하거나 evaluate()를 비교하면 많은 PHP 코드를 제거하는 XPath 함수를 찾을 수 있습니다. 당신은 count() 함수의 사용을 보았습니다. <<> 함수를 사용하여 주어진 ISBN과 함께 책의 제목을 반환합시다. 사용해야하는 XPath 표현식은 다음과 같습니다 query() 여기에서 검색 할 값은 인용문으로 둘러싸여 있으며 쉼표로 구분 된 용어가 필요하지 않습니다. DOMNodeList

XPath에서 복잡한 기능을 실행하는 것은 비교적 간단합니다.

XPATH <🎜 🎜> <🎜 🎜>에서 PHP 함수를 사용하는 <<> 때때로 표준 XPath 기능이 제공 할 수없는 더 강력한 기능이 필요할 수도 있습니다. 다행히도 PHP DOM을 사용하면 PHP의 기능을 XPath 쿼리에 통합 할 수 있습니다. 책 제목에서 단어 수를 반환하는 것을 고려해 봅시다. 가장 간단한 기능은 다음과 같은 방법을 쓸 수 있습니다.

<!DOCTYPE library [
  <!ELEMENT library (book*)>
  <!ELEMENT book (title, author, genre, chapter*)>
  <!ATTLIST book isbn ID #REQUIRED>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT genre (#PCDATA)>
  <!ELEMENT chapter (chaptitle,text)>
  <!ATTLIST chapter position NMTOKEN #REQUIRED>
  <!ELEMENT chaptitle (#PCDATA)>
  <!ELEMENT text (#PCDATA)>
]>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
그러나 그러나 함수

를 xpath 쿼리에 직접 통합 할 수도 있습니다. 이를 위해서는 여러 단계를 완료해야합니다. 먼저 XPath 객체를 사용하여 네임 스페이스를 등록해야합니다. XPath 쿼리의 PHP 함수는 "<🎜 🎜>"로 시작하여 사용하려는 기능의 이름을 괄호로 둘러싸고 있습니다. 또한, 정의 할 네임 스페이스는 str_word_count()입니다. 네임 스페이스는 다른 값으로 설정해야합니다. 그런 다음 PHP에게 "<🎜 🎜"로 기능이 나타날 때마다 네임 스페이스로 PHP가 처리해야한다고 PHP에 전화해야합니다. 함수를 호출하기위한 실제 구문은 다음과 같습니다 php:functionString 이 모든 것을 함께 모으고 http://php.net/xpath : <🎜 🎜>의 다음과 같은 상환을 받으십시오. registerPHPFunctions() 노드의 텍스트를 제공하려면 xpath 함수 <🎜 🎜> 호출 할 필요가 없습니다. php: 메소드가 자동으로 수행합니다. 그러나 다음은 유효합니다

PHP 함수는 PHP와 함께 제공되는 함수에만 국한되지 않습니다. 자신의 기능을 정의하고 XPath에서 제공 할 수 있습니다. 유일한 차이점은 함수를 정의 할 때 "<🎜 🎜>"대신 "<🎜 🎜>"을 사용하는 것입니다. 또한 함수 자체 또는 정적 방법 만 제공 할 수 있습니다. 호출 인스턴스 방법은 지원되지 않습니다. 클래스의 범위를 벗어난 일반 함수를 사용하여 기본 기능을 시연하겠습니다. 우리가 사용할 함수는 "George Orwell"의 책만 반환합니다. 쿼리에 포함하려는 각 노드에 대해 <🎜 🎜>를 반환해야합니다.
<?xml version="1.0" encoding="utf-8"?>
<library>
  <book isbn="isbn1234">
    <title>A Book</title>
    <author>An Author</author>
    <genre>Horror</genre>
    <chapter position="first">
      <chaptitle>chapter one</chaptitle>
      <text></text>
    </chapter>
  </book>
  <book isbn="isbn1235">
    <title>Another Book</title>
    <author>Another Author</author>
    <genre>Science Fiction</genre>
    <chapter position="first">
      <chaptitle>chapter one</chaptitle>
      <text>Sit Dolor Amet...</text>
    </chapter>
  </book>
</library>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

함수로 전달 된 인수는 <🎜 🎜>의 배열입니다. 이 함수는 배열을 반복하고 테스트 할 노드를 <🎜 🎜>로 반환 해야하는지 결정합니다. 이 예에서 테스트 할 노드는 getNumberOfWords()이며, 이는

를 사용하여 결정합니다. 이제 우리는
//library/book
로그인 후 복사
로그인 후 복사
:

메소드를 만들 수 있습니다 text() registerPHPFunctions() <🎜

가 정적 메소드라면 xpath 쿼리를 수정하여 읽어야합니다.
//library/book/author[text() = "An Author"]/..
로그인 후 복사
실제로 이러한 모든 기능은 XPath로만 쉽게 작성할 수 있지만이 예제는 XPath 쿼리를 확장하여 더 복잡하게 만드는 방법을 보여줍니다. XPath에서 객체 메소드를 호출 할 수 없습니다. XPath 쿼리를 완료하기 위해 특정 객체 속성 또는 메소드에 액세스해야한다면 가장 좋은 솔루션은 XPath를 사용하여 수행 할 수있는 부품을 완료 한 다음 객체 메소드 또는 속성을 사용하여 생성 된

를 필요에 따라 필요로하는 것입니다. . php:function <🎜 🎜> <<> 요약 php:functionString true XPath는 XML 데이터를 처리 할 때 코드 작성 및 코드 실행 속도를 높이는 좋은 방법입니다. 공식 DOM 사양의 일부는 아니지만 PHP DOM이 제공하는 추가 기능을 사용하면 사용자 지정 기능으로 표준 XPATH 기능을 확장 할 수 있습니다. 이것은 매우 강력한 기능이며 XPath 기능에 더 익숙해지면서 자신이 점점 더 적게 의존 할 수 있습니다.

<<> (Fotolia의 그림) <🎜 🎜> XPATH <🎜 🎜>를 가진 php dom에 대한 <🎜 🎜> <<> faqs (FAQ) XPath 란 무엇이며 PHP DOM에서 어떻게 작동합니까?

XPath (XML Path Language)는 XML 문서에서 노드를 선택하는 데 사용되는 쿼리 언어입니다. PHP DOM에서 XPath는 XML 문서에서 요소 및 특성을 가로 지르는 데 사용됩니다. 이름별로 노드를 선택하거나, 속성 값으로 노드를 선택하거나, 문서의 위치별로 노드를 선택하는 등 다양한 방법으로 XML 문서의 특정 부분을 찾고 선택할 수 있습니다. 이를 통해 PHP에서 XML 데이터를 구문 분석하고 조작하기위한 강력한 도구가됩니다.

domxpath 인스턴스를 만드는 방법은 무엇입니까? domxpath 인스턴스를 만들려면 먼저 domdocument 클래스의 인스턴스를 만들어야합니다. domdocument 객체를 얻은 후에는 domdocument 객체를 domxpath 생성자에 전달하여 새 domxpath 객체를 만들 수 있습니다. 예는 다음과 같습니다. XPath를 사용하여 노드를 선택하는 방법은 무엇입니까?

domxpath 객체의 <🎜 🎜> 메소드를 사용하여 노드를 선택할 수 있습니다.

메소드는 XPath 표현식을 매개 변수로 취하고 표현식과 일치하는 모든 노드를 포함하는 domnodelist 객체를 반환합니다. 예를 들면 :

이것은 <🎜 🎜> 요소의 자식 요소 인 모든

요소를 선택합니다.

<🎜 🎜> domxpath에서

방법의 차이점은 무엇입니까?

<<<>

<!DOCTYPE library [
  <!ELEMENT library (book*)>
  <!ELEMENT book (title, author, genre, chapter*)>
  <!ATTLIST book isbn ID #REQUIRED>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT genre (#PCDATA)>
  <!ELEMENT chapter (chaptitle,text)>
  <!ATTLIST chapter position NMTOKEN #REQUIRED>
  <!ELEMENT chaptitle (#PCDATA)>
  <!ELEMENT text (#PCDATA)>
]>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
방법은 모두 XPath 표현식을 평가하는 데 사용됩니다. 차이점은 그들이 반환하는 결과 유형입니다.

메소드는 xpath 표현식과 일치하는 모든 노드의 domnodelist를 반환합니다. 반면에 는 XPath 표현식에 따라 부울, 번호 또는 문자열과 같은 유형의 결과를 반환합니다. 표현식 결과가 노드 세트 인 경우

는 domnodelist를 반환합니다.

xpath 쿼리에서 네임 스페이스를 처리하는 방법은 무엇입니까? query()

xpath 쿼리에서 네임 스페이스를 처리하려면 <🎜 🎜> 메소드를 사용하여 DomxPath 객체와 네임 스페이스를 등록해야합니다. 이 방법에는 접두사와 네임 스페이스 URI의 두 가지 매개 변수가 있습니다. 네임 스페이스를 등록한 후 XPath 쿼리에서 접두사를 사용할 수 있습니다. 예를 들면 : query()

xpath를 사용하여 속성을 선택하는 방법은 무엇입니까?
<?xml version="1.0" encoding="utf-8"?>
<library>
  <book isbn="isbn1234">
    <title>A Book</title>
    <author>An Author</author>
    <genre>Horror</genre>
    <chapter position="first">
      <chaptitle>chapter one</chaptitle>
      <text></text>
    </chapter>
  </book>
  <book isbn="isbn1235">
    <title>Another Book</title>
    <author>Another Author</author>
    <genre>Science Fiction</genre>
    <chapter position="first">
      <chaptitle>chapter one</chaptitle>
      <text>Sit Dolor Amet...</text>
    </chapter>
  </book>
</library>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
기호와 속성 이름을 사용하여 xpath에서 속성을 선택할 수 있습니다. 예를 들어, 요소의 모든 속성을 ​​선택하려면 다음 xpath 표현식을 사용할 수 있습니다.

PHP DOM에서 XPath 함수를 사용하는 방법은 무엇입니까? <book></book> XPath는 XPath 표현식에서 사용할 수있는 많은 기능을 제공합니다. 이러한 기능은 문자열, 숫자, 노드 세트 등을 조작하는 데 사용될 수 있습니다. php dom에서 xpath 함수를 사용하려면 xpath 표현식에 함수를 포함 시키십시오. 예를 들어, 값이 30보다 큰 가격 요소를 가진 모든 <title></title> 요소를 선택하려면 다음과 같이

기능을 사용할 수 있습니다.

PHP DOM에서 HTML 문서와 함께 XPath를 사용할 수 있습니까?

예, PHP dom에서 html 문서와 함께 xpath를 사용할 수 있습니다. 그러나 HTML이 항상 잘 형성된 XML은 아니기 때문에 HTML과 함께 XPath를 사용하는 데 문제가있을 수 있습니다. 이러한 문제를 피하기 위해 DomDocument 클래스의

메소드를 사용하여 HTML 문서를로드 할 수 있습니다. 이 메소드는 HTML을 구문 분석하고 형식화 오류를 수정하여 생성 된 domdocument 객체와 함께 XPath를 사용할 수 있습니다.

PHP dom에서 xpath를 사용할 때 오류를 처리하는 방법은 무엇입니까? loadHTML() PHP DOM에서 XPath를 사용하는 경우, 잘못된 XPATH 표현식 형식 또는 XML 문서와 같은 여러 가지 이유로 오류가 발생할 수 있습니다. 이러한 오류를 처리하려면 함수를 사용하여 사용자 오류 처리를 활성화 할 수 있습니다. 이 기능으로 인해 libxml 오류가 내부적으로 저장되어 코드에서 처리 할 수 ​​있습니다. 그런 다음 함수를 사용하여 오류를 검색하고 필요에 따라 처리 할 수 ​​있습니다.

PHP dom에서 xpath를 사용하여 XML 문서를 수정할 수 있습니까?

XPath 자체는 XML 문서를 수정하는 방법을 제공하지 않지만 DOM API와 함께 XPath를 사용하여 XML 문서를 수정할 수 있습니다. XPath를 사용하여 수정하려는 노드를 선택한 다음 DOM API에서 제공 한 메소드를 사용하여 수정할 수 있습니다. 예를 들어, domnode 클래스의

메소드를 사용하여 노드를 삭제하거나 Domlement 클래스의

메소드를 사용하여 속성 값을 변경할 수 있습니다. libxml_use_internal_errors()

위 내용은 PHP DOM : XPath 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿