PHP DOM:XPathを使用します
コアポイント
- XPathは、機能を書き込むためのよりシンプルでクリーンな方法を提供し、クエリを書き込み、XMLデータをフィルターするために必要なコードの量を減らすXMLドキュメントをクエリするための構文です。
- XPathクエリは、2つの関数を使用して実行できます。どちらもクエリを実行しますが、違いは結果の結果が返されることです。
query()
evaluate()
XPathを使用すると、コードをより簡潔で効率的にすることができます。比較テストでは、純粋なXPathを使用する速度の利点は非常に明白であり、XPathバージョンは非XPathバージョンよりも約10%高速です。query()
DOMNodeList
PHP DOMを使用すると、カスタム関数を使用して標準のXPath関数を拡張できます。これには、PHP独自の関数をXPathクエリに統合し、XPathで使用されるPHP関数の登録が含まれます。これにより、XPathの機能が拡張され、より複雑なクエリを実行できるようになります。evaluate()
- この記事では、その機能とPHPでの実装方法を含め、XPathを詳細に調査します。 Xpathは、クエリを書き込み、XMLデータをフィルタリングするために必要なコードの量を大幅に削減し、一般的にパフォーマンスを改善できることがわかります。以前の投稿から同じDTDとXMLを使用して、PHP Dom XPath機能を実証します。簡単なレビューのために、DTDとXMLがどのように見えるかを次に示します。
<!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は、XMLドキュメントを照会するための構文です。最も簡単な形式は、アクセスする要素へのパスを定義することです。上記のXMLドキュメントを使用して、次の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>要素のコレクションを返します:
それだけです。 2つのフォワードスラッシュは、
がドキュメントのルート要素であることを示し、単一のスラッシュはその子要素であることを示します。とてもシンプルですね。しかし、特定の本を指定したい場合はどうなりますか? 「著者」によって書かれた本を返品したいとします。 XPathは次のとおりです
book
//library/bookおよび
。どちらもクエリを実行しますが、違いは結果の結果です。 library
は常にbook
を返し、
//library/book/author[text() = "An Author"]/..は空の
を返します。 text()
は番号を直接返すため、ノードからデータを抽出することなく、すぐに使用できます。 query()
evaluate()
query()
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)> ]>
次の方法は同じ結果を達成しますが、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()
//library/bookPHPを使用して面倒なフィルタリングを実行する必要なく、必要な情報を取得するためにXpathの1行のみが必要です。実際、これはこの機能を書くためのより簡単で簡潔な方法です!最後の例では
が使用されていることに注意してください。これは、関数evaluate()
が型付けされた結果を返すためです。 count()
を使用するとquery()
が返されますが、空のリストであることがわかります。これにより、コードがより簡潔になるだけでなく、速度の利点もあります。バージョン1の平均速度はバージョン2よりも30%高速であることがわかりましたが、バージョン3はバージョン2よりも約10%高速です(バージョン1よりも約15%高速)。これらの測定値はサーバーとクエリに基づいて異なりますが、純粋なXPathを使用すると、かなりの速度の利点がもたらされ、コードが読みやすくなり、メンテナンスが容易になります。 DOMNodeList
xpath関数
XPathはかなり多くの機能を使用でき、利用可能な機能を詳述する多くの優れたリソースがあります。またはDOMNodeLists
を比較しているかどうかを繰り返している場合、多くのPHPコードを排除するXPath関数を見つけることができます。 nodeValues
関数の使用が見られました。指定されたISBNで本のタイトルを返すためにcount()
関数を使用しましょう。使用する必要があるXpath式は次のとおりです
id()
//library/book/author[text() = "An Author"]/..
XPathで複雑な関数を実行することは比較的簡単です。
<?php public function getNumberOfBooksByAuthor($author) { $total = 0; $elements = $this->domDocument->getElementsByTagName("author"); foreach ($elements as $element) { if ($element->nodeValue == $author) { $total++; } } return $total; // 修正:这里应该是 $total,而不是 $number } ?>
で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:functionString
です。名前空間はこれに設定する必要があります。次に、http://php.net/xpath
を呼び出す必要があります。これは、名前空間として「registerPHPFunctions()
」で関数に遭遇するたびに、PHPで処理する必要があることをPHPに伝えます。関数を呼び出すための実際の構文は次のとおりです
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()
ノードのテキストを提供するには、xpath関数を呼び出す必要はないことに注意してください。
//library/book
登録PHP関数は、PHPに付属する関数に限定されません。独自の関数を定義し、Xpathで提供できます。唯一の違いは、関数を定義するときに、「text()
」の代わりに「registerPHPFunctions()
」を使用することです。さらに、関数自体または静的メソッドのみを提供できます。呼び出しインスタンスメソッドはサポートされていません。クラスの範囲を超えた通常の機能を使用して、基本的な機能を実証しましょう。使用する関数は、「ジョージオーウェル」の本のみを返します。クエリに含める各ノードについては、
//library/book/author[text() = "An Author"]/..
php:function
関数に渡された引数は、php:functionString
の配列です。この関数は、配列を反復し、テストするノードをtrue
で返す必要があるかどうかを判断する責任があります。この例では、テストするノードは
<?php public function getNumberOfBooksByAuthor($author) { $total = 0; $elements = $this->domDocument->getElementsByTagName("author"); foreach ($elements as $element) { if ($element->nodeValue == $author) { $total++; } } return $total; // 修正:这里应该是 $total,而不是 $number } ?>
DOMElements
DOMNodeList
実際には、これらの機能はすべてXpathのみで簡単に記述できますが、この例はXPathクエリを拡張してより複雑にする方法を示しています。 Xpathではオブジェクトメソッドを呼び出すことはできません。 XPathクエリを完了するために特定のオブジェクトプロパティまたはメソッドにアクセスする必要があることがわかった場合、最良の解決策はXPathを使用してできる部品を完成させ、任意のオブジェクトメソッドまたは属性を使用して、必要に応じて生成された/book
を処理することです。 。 /author
getGeorgeOrwellBooks()
<?php public function getNumberOfBooksByAuthor($author) { $query = "//library/book/author[text() = '$author']/.."; $xpath = new DOMXPath($this->domDocument); $result = $xpath->query($query); return $result->length; } ?>
compare()
XPathは、XMLデータを処理するときに書き込まれたコードの量を減らし、コード実行をスピードアップする素晴らしい方法です。公式DOM仕様の一部ではありませんが、PHP DOMが提供する追加機能により、カスタム関数を使用して標準のXPath関数を拡張できます。これは非常に強力な機能であり、Xpath関数に精通するにつれて、あなたはそれに頼ることをますます頼りにするかもしれません。
(フォトリアからの写真)
XPathとは何ですか?PHP DOMでどのように機能しますか?
XPath(XML PATH言語)は、XMLドキュメントからノードを選択するために使用されるクエリ言語です。 PHP DOMでは、XPATHはXMLドキュメントで要素とプロパティを通過するために使用されます。名前でノードを選択したり、属性値でノードを選択したり、ドキュメント内の場所でノードを選択したりするなど、XMLドキュメントの特定の部分をさまざまな方法で見つけて選択できます。これにより、PHPでXMLデータを解析および操作するための強力なツールになります。
domxpathのインスタンスを作成する方法は?
domxPathのインスタンスを作成するには、最初にdomdocumentクラスのインスタンスを作成する必要があります。 DomDocumentオブジェクトを取得したら、DomdocumentオブジェクトをDomxPathコンストラクターに渡すことにより、新しい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を使用してノードを選択する方法は?
domxPathオブジェクトのquery()
メソッドを使用してノードを選択できます。 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>
これにより、<book>
要素の子要素であるすべての要素が選択されます。 <title>
xpath式の評価には、query()
evaluate()
および
メソッドの両方が使用されます。違いは、彼らが返す結果のタイプです。 メソッドは、XPath式に一致するすべてのノードのドムノデリストを返します。一方、 XPathを使用してプロパティを選択する方法は?
はい、PHP DOMのHTMLドキュメントでXPathを使用できます。ただし、HTMLは必ずしも十分に形成されたXMLであるとは限らないため、XPathをHTMLで使用しようとするのに問題がある場合があります。これらの問題を回避するために、domdocumentクラスの PHP DOMでXPathを使用する場合、誤ったXPath式形式やXMLドキュメントなど、いくつかの理由でエラーが発生する可能性があります。これらのエラーを処理するには、 XPath自体はXMLドキュメントを変更する方法を提供していませんが、XPATHをDOM APIで使用してXMLドキュメントを変更できます。 XPathを使用して変更するノードを選択し、DOM APIによって提供されるメソッドを使用して変更できます。たとえば、Domnodeクラスの 以上がPHP DOM:XPathを使用しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。query()
は、XPath式に応じて、ブール値、数字、または文字列などの入力された結果を返します。式の結果がノードセットの場合、evaluate()
はdomnodelistを返します。 query()
evaluate()
XPathクエリで名前空間を処理する方法は? evaluate()
registerNamespace()
//library/book
要素のすべてのプロパティを選択するには、次のxpath式:
を使用できます。 @
php domでxpath関数を使用する方法は? <a></a>
href
XPathは、XPath式で使用できる多くの機能を提供します。これらの関数は、文字列、数字、ノードセットなどを操作するために使用できます。 php domでxpath関数を使用するには、xpath式に関数を含めるだけです。たとえば、値が30を超える価格要素を持つすべての//a/@href
要素を選択するには、以下に示すように
PHP DOMのHTMLドキュメントでXPathを使用できますか?
loadHTML()
メソッドを使用してHTMLドキュメントをロードできます。このメソッドはHTMLを解析し、任意のフォーマットエラーを修正し、生成されたDomdocumentオブジェクトでXPathを使用できます。 php domでxpathを使用するときにエラーを処理する方法は?
libxml_use_internal_errors()
関数を使用してユーザーエラー処理を有効にすることができます。この機能により、LIBXMLエラーが内部に保存され、コードでそれらを処理できます。その後、libxml_get_errors()
関数を使用してエラーを取得し、必要に応じてそれらを処理できます。 php domのxpathを使用してxmlドキュメントを変更できますか?
removeChild()
メソッドを使用してノードを削除するか、ドメレメントクラスのsetAttribute()
メソッドを使用して属性の値を変更できます。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

bcmathisentialforAccuratecurateptocurrencycalcatulationsinphpbecuseating-pointarithmeticincecceptesuncectesubleroundingErrors.1..2 Yieldimimpreciseresults(e.g.、0.300000000000000000000000000precyptowsyptowyprectoyptoyprecyptoyprecyptoyppowsyptowprecyptowprecyptowprecyptowprecyptowprecyptowprecyptowprecyptowpreciseResults)

rawStringsindomain-drivenApplicationsは、ValueObjedStopReventBugsAndimproveTypeTytyのValueObue obue obue obtedsopreated; 1. 1.SustoprimiteObsessionを使用します

useguzzleforrobustttprequestswithheadersandtimeouts.2.parsehtmleffitywithsymfonydomddomedrawlerusingssseLectors.3.handlejavascript-heavysitesbyintegratingpuppeteerviaphpexec()torenderpages.4.respectrobots.txt、rotedelays.txt、adddelays.txt、adddelays.txt、

一致式は、PHP8でより簡潔で安全な代替品を提供します。 IF-ELSEIFおよびスイッチと比較して、緩いタイプの比較の誤差を回避するために、厳密な比較(===)を自動的に実行します。 2。一致は、値を直接返すことができる式で、割り当てと関数のリターンに適しているため、コードの単純さを改善します。 3。一致は常に厳密なタイプチェックを使用して、整数、ブール膜、弦の間の予期しない一致を防止します。 4.単一腕のマルチ値マッチング(0、false、 ''など)をサポートしますが、複雑な条件(範囲判断など)は依然としてif-elseifを必要とします。したがって、単一の変数の正確な値をマッピングするときに一致を使用する必要がありますが、複雑なロジックはif-elseifを保持します。

ContextualMagicConstantantantandAmed、意味のある条件のreavideclecontextinerrorlogs、suthasuser_login_attemptorpayment_processing.2.theyimprovedebuggingbyReplacingvagueErrormessesedexextext、evabling -cuseidextific

このチュートリアルでは、カスタム記事タイプリストのWordPressの各記事に「引用符を送信」ボタンを追加する方法に関する詳細な手順を提供します。クリックした後、記事IDを含むカスタムHTMLフォームがポップアップし、フォームデータはAJAXの提出と成功メッセージ表示です。コンテンツは、フロントエンドのjQuery UIポップアップ設定、動的データ転送、AJAX要求処理、バックエンドのWordPress Ajaxフックとデータ処理PHP実装をカバーし、完全な機能、安全で優れたユーザーエクスペリエンスを確保します。

switchcanbeslyfasterthanif-elsewhencomparingsing liabariableagain stiplescalalarues、特にマネイセイセセソールティグアーズデュートープロシブルオプティイゼーション;

phparrayshanddedatacollectionseffictifictlyusingindexorassociativeStructures; they recreated witharray()または[]、AccessedViakeys、ModifiedByAssignment、Iterated with foreach、およびmanipulatedUsingfunctionslikecount()、in_array()、Array_key_exists()、Array_exists()、Array_exists()、Array_key_exists()、Array_key_exists()、Array_key_exists()、
