XPathを使用したゲーム



XML

XMLは、(既存のデータベースファイルの代わりに)構造化データを保存し、 プログラム間で情報を交換し、それに基づいて辞書と呼ばれることもあるより専門的なマークアップ言語(たとえばXHTML )を作成するように設計されたテキスト形式です。 XMLはSGMLの簡略化されたサブセットです。

XMLは、ファイルを読みやすくするのに便利です。

たとえば、単純なXMLファイルは

  <?xml version = "1.0" encoding = "UTF-8"?>
 <ルート>

  <データ>

     <行>
          <id> 1 </ id>
          <name company = "ibm" status = "banned"> Vasilii </ name>
          <age> 18 </ age>

     </ row>

     <行>
           <id> 2 </ id>
           <name company = "ibm">アントン</ name>
           <age> 20 </ age>
     </ row>
     <行>
           <id> 3 </ id>
           <name company = "apple"> Petro </ name>
           <age> 35 </ age>
      </ row>
  </ data>

 </ root> 

このファイルは、XPathの操作方法を示します。

例からわかるように、XMLは読みやすく、構造化されているという点で便利です。 この形式でデータを保存すると便利です;さらに、このタイプのファイルを操作するための多くのライブラリがあります。

すべての要素には独自のパスがあります。たとえば、root-data-row [0]パスはVasilyブランチを指します。

しかし、プログラマーがこのファイルの使用を開始すると、ファイル操作に問題が生じます。 たとえば、年齢が20歳未満のすべての人を選択する必要があります。

どうする

この問題の解決策はXPathです。

XPathは一種の言語であり、伝えられるところでは、条件を満たしたブランチにイテレータを返すXMLドキュメントのクエリ言語です。

文書があります。

このドキュメントのPHPコードを作成します。 この例では、SimpleXML関数を使用して動作します。

コードがあります:
  $ xml = simplexml_load_file( "db.xml");
 var_dump($ xml); 

結果は次のようになります。
 オブジェクト(SimpleXMLElement)[1]
  パブリック 'データ' =>
    オブジェクト(SimpleXMLElement)[2]
       public 'row' =>
        配列
           0 =>
            オブジェクト(SimpleXMLElement)[3]
               public 'id' => string '1'(長さ= 1)
               public 'name' => string 'Vasilii'(長さ= 7)
               public 'age' => string '18'(長さ= 2)
           1 =>
            オブジェクト(SimpleXMLElement)[4]
               public 'id' => string '2'(長さ= 1)
               public 'name' => string 'Anton'(長さ= 5)
               public 'age' => string '20'(長さ= 2)
           2 =>
            オブジェクト(SimpleXMLElement)[5]
               public 'id' => string '3'(長さ= 1)
               public 'name' => string 'Petro'(長さ= 5)
               public 'age' => string '35'(長さ= 2) 

結果からわかるように、次のようにアクセスできます。$ xml-> data-> row [0]-> name == Valilii。

XPath自体。

XPathでは、条件とその組み込み関数を使用してブランチを選択できます。

たとえば、/(スラッシュ)-ブランチの階層を示します。たとえば、/ data、

使用時のハイライト:

/-ルートノード

//-トレース条件を満たす一連のノード(wikiの詳細)

*-任意の文字

@-属性

[]-SQLのanalog()、条件を設定します

および、または-AND、OR。

詳細はru.wikipedia.org/wiki/XPathで

XPathを使用して、すべての要素を選択してみましょう。

  foreach($ xml-> xpath( "// row")as $ res)var_dump($ res); 

 オブジェクト(SimpleXMLElement)[6]
   public 'id' => string '1'(長さ= 1)
   public 'name' => string 'Vasilii'(長さ= 7)
   public 'age' => string '18'(長さ= 2)

オブジェクト(SimpleXMLElement)[7]
   public 'id' => string '2'(長さ= 1)
   public 'name' => string 'Anton'(長さ= 5)
   public 'age' => string '20'(長さ= 2)

オブジェクト(SimpleXMLElement)[8]
   public 'id' => string '3'(長さ= 1)
   public 'name' => string 'Petro'(長さ= 5)
   public 'age' => string '35'(長さ= 2)


18歳以上のサンプルを作成しましょう
  foreach($ xml-> xpath( "// row [age> 18]")as $ res)var_dump($ res); 

結果:
 オブジェクト(SimpleXMLElement)[6]
   public 'id' => string '2'(長さ= 1)
   public 'name' => string 'Anton'(長さ= 5)
   public 'age' => string '20'(長さ= 2)

オブジェクト(SimpleXMLElement)[7]
   public 'id' => string '3'(長さ= 1)
   public 'name' => string 'Petro'(長さ= 5)
   public 'age' => string '35'(長さ= 2)


属性company = 'ibm'のすべてに対して選択を行いましょう
  foreach($ xml-> xpath( "// row [name [@ company = 'ibm']]")as $ res)var_dump($ res); 

結果:
 オブジェクト(SimpleXMLElement)[6]
   public 'id' => string '1'(長さ= 1)
   public 'name' => string 'Vasilii'(長さ= 7)
   public 'age' => string '18'(長さ= 2)

オブジェクト(SimpleXMLElement)[7]
   public 'id' => string '2'(長さ= 1)
   public 'name' => string 'Anton'(長さ= 5)
   public 'age' => string '20'(長さ= 2)

@company属性は名前の一部であるため、行[@ company = ..]を記述するだけでは不可能であることに注意してください。

18歳以上でIBMで働く人々のサンプルを作成しましょう
  foreach($ xml-> xpath( "// row [name [@ company = 'ibm'] and age> 18]")as $ res)var_dump($ res); 

結果:
 オブジェクト(SimpleXMLElement)[6]
   public 'id' => string '2'(長さ= 1)
   public 'name' => string 'Anton'(長さ= 5)
   public 'age' => string '20'(長さ= 2) 


結合は非常に簡単であることがわかります。
次の例は、組み込み関数の使用方法を示しています。たとえば、
last()-リストの最後の人を取得します。
  foreach($ xml-> xpath( "// row [last()]")as $ res)var_dump($ res); 

結果:
 オブジェクト(SimpleXMLElement)[6]
   public 'id' => string '3'(長さ= 1)
   public 'name' => string 'Petro'(長さ= 5)
   public 'age' => string '35'(長さ= 2)


そして今、私たちはIBMで働いていない人を見つけます:
  foreach($ xml-> xpath( "// row [name [not(@ company = 'ibm')]]")as $ res)var_dump($ res); 

結果:
 オブジェクト(SimpleXMLElement)[6]
   public 'id' => string '3'(長さ= 1)
   public 'name' => string 'Petro'(長さ= 5)
   public 'age' => string '35'(長さ= 2)


すべてが非常にシンプルで便利です!

結果


Xpathは、XMLドキュメントを操作するための優れたツールです。 基本的な機能を実行します。
より複雑なものにはXQueryがありますが、これは今ではそうではありません。

XML + XPathは、何らかの理由でデータベースを使用するのが不便な場所での価値のある代替手段です。

ありがとう
継続する。


一次資料

Source: https://habr.com/ru/post/J65383/


All Articles