Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SimpleXML] Sprawdzanie czy tag istnieje
Forum PHP.pl > Forum > PHP
starach
Dajmy przykładowo schemat Propel'a.
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--Autogenerated by PropelSchemaReverseTask class.-->
  3. <database name="orglee" defaultIdMethod="native">
  4. <table name="article_category" phpName="Category">
  5.    <column name="_al_id" type="INTEGER" size="11" primaryKey="true" required="true"/>
  6.    <column name="_acs_id" type="INTEGER" size="11" required="false"/>
  7.    <foreign-key foreignTable="article_list">
  8.                  <reference local="_al_id" foreign="al_id"/>
  9.            </foreign-key>
  10.            <foreign-key foreignTable="article_categories">
  11.                  <reference local="_acs_id" foreign="acs_id"/>
  12.            </foreign-key>
  13.  </table>
  14. </database>
Będąc na tagu <foreign-key który jest powiedzmy przypisany do zmiennej $column chcę sprawdzić czy istnieje pod-tag o nazwie reference.
  1. <?php
  2. $xml = new SimpleXMLElement(file_get_contents($file));
  3. foreach($xml as $table)
  4. {
  5.  foreach($table as $column)
  6.  {
  7.    if($column->getName() == 'foreign-key')
  8.    {
  9.       if() // Jak sprawdzić czy występuje tag o nazwie reference?
  10.    }
  11.  }
  12. }
  13. }
  14. ?>
Niestety po mimo sporej ilości kombinowania nie mogę tego w żaden prosty sposób sprawdzić. Z góry dzięki.
scanner
  1. <?php
  2. $Xml = simplexml_load_file( $file );
  3. foreach( $Xml->table->{'foreign-key'} as $FK ){
  4.    var_dump( isset( $FK->reference ) );
  5. }
  6. ?>


simplexml_load_file" title="Zobacz w manualu PHP" target="_manual jest IMHO lepsze niż Twój sposób ładowania danych.
starach
Cytat
simplexml_load_file" title="Zobacz w manualu PHP" target="_manual jest IMHO lepsze niż Twój sposób ładowania danych.
Hmm chyba rozumiem dlaczego. Chodzi o wydajność. ( ? ) Ta funkcji mi sama upakuje wszystko w obiekt tak zamiast robić to przez pośredników. tongue.gif

Cytat
  1. <?php
  2. $Xml = simplexml_load_file( $file );
  3. foreach( $Xml->table->{'foreign-key'} as $FK ){
  4.    var_dump( isset( $FK->reference ) );
  5. }
  6. ?>
Jak możesz to byłbym wdzięczny za podanie nazwy tego sposobu zapisu, bo go nie rozumiem.
Niestety nie mogę się tak odwołać do klucz foreign-key bo tagów table jest w schemacie wiele...

W trakcie pisania tego zdanie już zrozumiałem jak mam to zrobić.
  1. <?php
  2. var_dump($xml->table[1]->{'foreign-key'});
  3. ?>

Przy czym "1" może być kluczem tablicy otrzymywany poprzez działanie foreach.
  1. <?php
  2. foreach($xml as $klucz => $table)
  3. ?>


Dzięki za pomoc.

edit>
Ja pietrusze:
  1. <?php
  2. $current_foreign = $current_column - count($xml->table[$current_table]->{'column'});
  3. $reference = $xml->table[$current_table]->{'foreign-key'}[$current_foreign]->{'reference'};
  4.                    
  5. !isset($reference['local']) || !isset($reference['local']
  6. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.