Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Odczyt atrybutu z przestrzenią nazw, SimpleXML - problemy. Może inne rozwiązania?
WebCM
post
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

Ostrzeżenie: (0%)
-----


Jest sporo problemów z analizą XHTML w PHP przez funkcje XML. Kilka już rozwiązałem, stosując różne tricki i obejścia. Jednak jest kolejny - jak pobrać wartość atrybutu z przestrzenią nazw? Wprawdzie można zrezygnować z namespace, lecz lepiej zaznaczyć w kodzie XHTML, że znacznik lub atrybut należy do dziedziny F3.
  1. <input type="checkbox" id="something" f3:var="config.item" />

  1. <?php
  2. foreach(xpath('//input[@id="ms"]') as $item) echo $item['f3:var'];
  3. ?>
Niestety, nie działa. Nawet $f3->item['var'].

A może zastosowanie funkcji preg_* i str_* lepiej nadaje się do analizy kodu XHTML? Właściwie operacje na XML-u wykonuję tylko po to, aby odczytać wartości paru atrybutów, np. f3:var, z tym że:
- jeśli znajdzie się w <form>, trzeba przejechać wszystkie pola: checkbox, radio i select i odczytać ich nazwy
- gdy znajdzie się w tych polach - dotyczy tylko tych pól
Trzeba potem jeszcze wstawić instrukcję warunkową. Za pomocą SimpleXML tylko pobieram kod pola do zamiany przez str_replace(), bo w XML-u tego raczej nie zrobię. Przykładowy wynik:
Kod
<input type="checkbox" id="something" <?php if($config['item']) echo 'checked="checked" ';?>/>
LUB:
<?php if($config['item']) echo '<input type="checkbox" id="something" checked="checked" />'; else echo '<input type="checkbox" id="something" />'; ?>

Właściwie zaletą parsera XML jest to, że wyrzuci błąd, gdy jakiś znacznik jest niezamknięty, lecz uruchamiam go dopiero wtedy, gdy znajduje się w szablonie choć 1 znacznik <form>. Może nie ma to nawet sensu?

Ten post edytował WebCM 25.04.2008, 16:44:16
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $str= '<root xmlns:foo="http://gdzies.t.am/def">
  3. <child foo:bar="qwerty" foo:aaa="BBB">i am the child</child>
  4. </root>';
  5. $xml = new SimpleXMLElement($str);
  6. $child = $xml->child;
  7. $nss = $xml->getDocNamespaces();
  8. $attributes = $child->attributes( $nss['foo']);
  9. foreach ( $attributes as $k => $v )
  10. {
  11. printf( "[%s] == %s<br />", $k, $v );
  12. }
  13. print_r( $nss );
  14. ?>


1. google
2. http://www.sitepoint.com/blogs/2005/10/20/...and-namespaces/
3. manual (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
?>
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 17:37