РНР 5 в подлинникеСтраница 456 из 554 |
||
|
Глава 41. Расширение SIMPLEXML 921 Корневой тег <game> в атрибуте moves хранит количество сделанных ходов. Теги <ц>, <12>, <13> описывают строки поля игры. Теги <ci>, <с2>, <сЗ> — столбцы, содержащие значения х, о или пробел. Атрибут move хранит номер хода, при котором было выставлено указанное значение. В листинге 41.2 приведен текст PHP-программы с использованием расширения SIMPLEXML, устанавливающей символ о в третий столбец первой строки. | Листинг 41.2. Файл move13.php <?php ## Пример скрипта movel3.php, использующего расширение SIMPLEXML. $game = simplexml_load_file (' game .xml') ; $move = $game['moves']+1; $game['moves 1] = $move; $game->ll->c3['move'] = $move; $game->ll->c3 = 'O'; echo $game->asXML () ; ?> Функция simpiexmi_ioad_fiie() расширения SIMPLEXML создает объект класса simpiexmieiement и записывает в не го структуру XML-файла game.xml. Атрибуты элемента доступны в экземпляре класса simpiexmi_eiement как значения ассоциативного массива. Получить значение атрибута moves корневого тега можно через выражение: $game [ 'moves']. Причем атрибуты доступны как на чтение, так и на запись. Выражение $game['moves']=$move; записывает значение переменной $move в атрибут moves корневого тега. Дочерние элементы доступны как свойства экземпляра класса с именем, соответствующим имени элемента. К элементу <и> корневого тега можно обратиться как $дате->и. Соответственно, дочерний элемент <сЗ> дочернего элемента <и> описывается выражением: $дате->11->сЗ. Выражение $game->ll->c3['move']=$move; записывает значение переменной $move в атрибут move элемента сз подэлемента и. Выражение $game->ll->c3='0'; определяет содержимое элемента сз подэлемента и. Метод asXMLO экземпляра класса simpiexmi_eiement формирует XML-строку созданного документа. В результате работы скрипта moveI3.php мы получим результат, показанный в листинге 41.3. I Листинг 41.3. Результат работы программы move13.php <?xml version="l.0"?> <game moves="4"> 922 Часть VI. XML в РНР 5 <11><с1 move="2">0</cl><c2 move=" "> </с2><сЗ move="4 ">0</сЗх/11> <12><с1 move=" "> </cl><c2 move="l">X</c2xc3 move=" "> </сЗ></12> <13><с1 move=" "> </cl><c2 move=" "> </с2хсЗ move="3">0</c3></13> </game> Как вы видите, программа с использованием расширения SIMPLEXML выглядит намного компактнее. Тот же алгоритм, записанный с помощью стандарта DOM, выглядит раза в два длиннее (листинг 41.4). Листинг 41.4. Файл move13dom.php <?php ## Пример скрипта move13dom.php, использующего расширение dom. $dom = new domDocument; $dom->load(1 game .xml1); // загрузить документ $game = $dom->documentElement; // корневой элемент $move = $game->getAttribute('moves')+1; // атрибут moves корневого элемента $game->setAttribute('moves', $move); // установить новое значение foreach ($game->childNodes as $1) { // для всех дочерних элементов if ($l->nodeName == '11') { // искомый элемент 11? foreach ($l->childNodes as $c) { // для всех дочерних элементов if ($c->nodeName == 1сЗ') { // искомый элемент сЗ? // установить атрибут move и значение элемента $c->setAttribute('move', $move); $c->firstChild->data = 'О'; } } } echo $dom->saveXML(); Загрузка и сохранение XML-документов Так же как и в стандарте DOM, при загрузке и сохранении XML-документов вы можете использовать как файл, так и строку. Загрузка XML-документа осуществляют следующие функции. simplexml_element simplexml_load_file(string filename) Функция возвращает объект класса simpiexml_element, содержащий дерево XML-документа файла filename. simplexml_element simplexml_load_string(string xzal_string) Функция возвращает объект класса simplexml_eiement, содержащий дерево XML-документа строки xml_string. Обратите внимание на то, что в отличие от~расширения DOM, где для загрузки документа используются методы объекта класса domDocument, в расширении SIMPLEXML для загрузки документа используются функции. |
| |
|
В начало ←предыдущая следующая→ ... 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 ... | ||