Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > xml/dom/изменение содержимого узла


Автор: sgrebnev 7.8.2007, 11:33
вот xml к примеру:
Код

<?xml version="1.0"?>
<constants>
    <const id="0">
        <name>NUM_ROW_ON_PAGE</name>
        <value>5</value>
    </const>
    <const id="1">
        <name>SOME_CONS_ONE</name>
        <value>1</value>
    </const>
    <const id="2">
        <name>SOME_CONS_TWO</name>
        <value>2</value>
    </const>
    <const id="3">
        <name>SOME_CONS_THREE</name>
        <value>3</value>
    </const>
</constants>


теперь получить содержимое узла по id с помощью dom объекта я могу так:

Код

function getConstantOnID( $id ) {
  global $dom;
  $const_array = array();
  $consts = $dom->getElementsByTagName("const");
  foreach ($consts as $const) {
    if ($const -> getAttribute("id") == $id) {
      foreach ($const->childNodes  as $item) {
        if (in_array($item->nodeName, array("name","value") ) ) {
          $const_array["id"] = $const -> getAttribute("id");
          $const_array[$item->nodeName] = $item->textContent;
        }
      }
    }
  }
  return $const_array;
}


а терь как изменить содержимое (name/value) узла, найденного по id?

Автор: Golda 7.8.2007, 23:36
Код

function setConstantOnId($dom, $id, $value) {
    $xpath = new DOMXPath($dom);

    $valueObj = $xpath->query('/constants/const[@id=' . $id . ']/value');
    if ($valueObj->length == 0) return false;
    $textDataObj = $valueObj->item(0)->childNodes->item(0);
    $textDataObj->replaceData(0, strlen($textDataObj->nodeValue), $value);
    return true;
}


только не забудьте потом сохранить изменения

Код

echo $dom->saveXML();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)