Как установить узел файла XML? - PullRequest
0 голосов
/ 18 июля 2011

Я создал XML-документ.

Итак, теперь я хочу найти хороший узел и установить значения этого узла, но после любого исследования этой темы я не знаю, какчтобы сделать это.

Это мой документ:

<?xml version="1.0" encoding="utf-8"?>
<scripts>
  <script nom="myTools.class.php">
    <titre>Useful php classes</titre>
    <date>18/07/2011</date>
    <options>
      <option name="topic">Tutorials</option>
      <option name="desc">Tutorial for you</option>
    </options>
  </script>
  <script nom="index.php">
    <titre>blabla</titre>
    <date>15/07/2011</date>
    <options>
     <option name="topic">The homepage</option>
    </options>
  </script>
</scripts

>

Итак, я хотел бы построить HTML-форму со значениями тезисов, но на данный момент яне могу получить и установить то, что я хочу: (

Я хочу получить первый "скрипт" узел:

  <script nom="myTools.class.php"> //How to set the "nom" attribute ?
    <titre>Useful php classes</titre> //How to get this value and set it ?
    <date>18/07/2011</date>
    <options>
      <option name="topic">Tutorials</option>
      <option name="desc">Tutorial for you</option>
    </options>
  </script>

У меня нет проблем, чтобы зациклить весь документ, но не только смой "собственный выбор"

У вас есть идея?

Ответы [ 2 ]

0 голосов
/ 18 июля 2011

сначала используйте XPath для получения документа dom

$dom=new DOMDocument();
$dom->loadXML('file');  // file is the name of XML file if u have a string of XML called $string then use $dom->loadXML($string)
$xpath=new DOMXPath($dom);
$path='//scripts/script[1]';  // that would get the first node
$elem=$xpath->query($path);

сейчас $ elem[0] - ваш первый узел скрипта

, если вы хотите получить элементы по их атрибуту, тогда используйте $path='//scripts/script[@nom='attribute value']'; сейчасиспользование этого пути вернет набор узлов с элементами сценария, имеющими атрибут nom с заданным значением, которое вы можете увидеть здесь


в ответ на комментарий bahamut100 xpath для элемента option равен //options/option

теперь, если вы хотели получить узел опции по значению атрибута, тогда сделайте это

$path='//options/option[@attrib_name=attrib_value]';
$elem=$xpath->query($path);

, но если вы хотели получить атрибуты узла, то сначала вам нужно добраться до этого узла.в вашем случае вам нужно сначала добраться до узла опции

$path='//options/option';
$option=$xpath->query($path);

now $option - список узлов, поэтому для получения атрибутов первого элемента используйте

$attribute=$option[0]->attributes;

, теперь атрибут $ isNamedNodeMap, поэтому для получения значения первого атрибута используйте

$value=$attribute->item(0);
0 голосов
/ 18 июля 2011

XPath - это один из способов сделать это:

$dom = new DOMDocument();
$dom->loadXML(... your xml here ...);

$xp = new DOMXPath($dom);
$results = $xp->query('//script[@nom='myTools.class.php']/titre');

$old_title = $results[0]->nodeValue;
$results[0]->nodeValue = 'New title here';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...