XPath는 기능을 작성하는 더 간단하고 깨끗한 방법을 제공하고 쿼리를 작성하고 XML 데이터를 필터하는 데 필요한 코드의 양을 줄이는 XML 문서를 쿼리하기위한 구문입니다.
query()
PHP DOM을 사용하면 사용자 정의 함수로 표준 XPATH 기능을 확장 할 수 있습니다. 여기에는 PHP 자체 기능을 XPath 쿼리에 통합하고 XPath에 사용되는 PHP 기능 등록이 포함됩니다. 이것은 XPath의 기능을 확장하여보다 복잡한 쿼리를 수행 할 수 있도록합니다. evaluate()
query()
이 기사는 기능과 PHP에서 어떻게 구현되는지를 포함하여 XPath를 깊이 탐색 할 것입니다. XPath는 쿼리를 작성하고 XML 데이터를 필터링하는 데 필요한 코드의 양을 크게 줄이고 일반적으로 성능을 향상시킬 수 있습니다. 이전 게시물에서 동일한 DTD 및 XML을 사용하여 PHP DOM XPATH 기능을 보여 드리겠습니다. 빠른 검토를 위해 DTD와 XML은 다음과 같습니다.
DOMNodeList
evaluate()
를 사용할 수 있으며 사각형 브래킷의 노드 값을 비교할 수 있으며, "/.."는 부모 요소를 원한다는 것을 의미합니다 (즉, 하나의 노드를 위쪽으로 이동). 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)> ]>
<?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 <🎜 🎜> <🎜 🎜>에서 PHP 함수를 사용하는 <<>
를 xpath 쿼리에 직접 통합 할 수도 있습니다. 이를 위해서는 여러 단계를 완료해야합니다. 먼저 XPath 객체를 사용하여 네임 스페이스를 등록해야합니다. XPath 쿼리의 PHP 함수는 "<🎜 🎜>"로 시작하여 사용하려는 기능의 이름을 괄호로 둘러싸고 있습니다. 또한, 정의 할 네임 스페이스는
메소드를 만들 수 있습니다
를 필요에 따라 필요로하는 것입니다. . <<> (Fotolia의 그림) <🎜 🎜>
XPATH <🎜 🎜>를 가진 php dom에 대한 <🎜 🎜> <<> faqs (FAQ)
<<<>
xpath 쿼리에서 네임 스페이스를 처리하려면 <🎜 🎜> 메소드를 사용하여 DomxPath 객체와 네임 스페이스를 등록해야합니다. 이 방법에는 접두사와 네임 스페이스 URI의 두 가지 매개 변수가 있습니다. 네임 스페이스를 등록한 후 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)>
]>
<?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>
count()
가 반환되지만 빈 목록이라는 것을 알 수 있습니다. 이것은 코드를 더 간결하게 만들뿐만 아니라 속도의 장점도 있습니다. 버전 1은 버전 2보다 평균 속도가 30% 더 빠르지 만 버전 3은 버전 2보다 약 10% 빠릅니다 (버전 1보다 약 15% 더 빠릅니다). 이러한 측정은 서버와 쿼리에 따라 다르지만 순수한 XPath를 사용하면 상당한 속도 이점을 가져 오는 동시에 코드를 쉽게 읽고 유지 관리 할 수 있습니다. //library/book
<!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)>
]>
str_word_count()
입니다. 네임 스페이스는 다른 값으로 설정해야합니다. 그런 다음 PHP에게 "<🎜 🎜"로 기능이 나타날 때마다 네임 스페이스로 PHP가 처리해야한다고 PHP에 전화해야합니다. 함수를 호출하기위한 실제 구문은 다음과 같습니다
php:functionString
http://php.net/xpath
: <🎜 🎜>의 다음과 같은 상환을 받으십시오.
registerPHPFunctions()
php:
메소드가 자동으로 수행합니다. 그러나 다음은 유효합니다
<?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()
<🎜 //library/book/author[text() = "An Author"]/..
php:function
<🎜 🎜> <<> 요약 php:functionString
true
XPath는 XML 데이터를 처리 할 때 코드 작성 및 코드 실행 속도를 높이는 좋은 방법입니다. 공식 DOM 사양의 일부는 아니지만 PHP DOM이 제공하는 추가 기능을 사용하면 사용자 지정 기능으로 표준 XPATH 기능을 확장 할 수 있습니다. 이것은 매우 강력한 기능이며 XPath 기능에 더 익숙해지면서 자신이 점점 더 적게 의존 할 수 있습니다. 메소드는 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 표현식과 일치하는 모든 노드의 domnodelist를 반환합니다. 반면에
는 domnodelist를 반환합니다. query()
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>
<book></book>
<title></title>
요소를 선택하려면 다음과 같이
메소드를 사용하여 HTML 문서를로드 할 수 있습니다. 이 메소드는 HTML을 구문 분석하고 형식화 오류를 수정하여 생성 된 domdocument 객체와 함께 XPath를 사용할 수 있습니다. loadHTML()
메소드를 사용하여 노드를 삭제하거나 Domlement 클래스의 libxml_use_internal_errors()
위 내용은 PHP DOM : XPath 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!