За последние 24 часа нас посетили 18533 программиста и 1670 роботов. Сейчас ищут 888 программистов ...

Как удалить XML node с таким-то аттрибутом.

Тема в разделе "PHP для новичков", создана пользователем Waynez, 10 мар 2009.

  1. Waynez

    Waynez Активный пользователь

    С нами с:
    10 мар 2009
    Сообщения:
    12
    Симпатии:
    0
    Здраствуйте! :)
    Есть такой вот ХМЛ:
    Код (Text):
    1. <root>
    2.   <comment id="09661133027">
    3.     <date>09.03.09 11:33</date>
    4.     <text>aaa</text>
    5.   </comment>
    6.   <comment id="09661159088">
    7.     <date>09.03.09 11:59</date>
    8.     <text>asdad</text>
    9.   </comment>
    10. </root>
    Можно ли удалить как-то только тот блок <comment>, чей id аттрибут я указал, допустим 09661133027?
    что-то типа:
    unset($xml->comment->@id->09661133027)

    и если предыдущие реально, то как создать запись только в блоке с определённым id? :roll:
     
  2. milk

    milk Активный пользователь

    С нами с:
    16 фев 2009
    Сообщения:
    10
    Симпатии:
    0
    Используй XPath и функции для PHP для работы с DOM и XPath
    http://www.zvon.org/xxl/XPathTutorial/G ... mples.html
    http://www.php.ru/manual/ref.dom.html

    Пример 6
    BBB[@id='b1']
    Выбираются элементы BBB, имеющие атрибут id со значением b1
    HTML:
    1.      
    2. <AAA>
    3.           [b]<BBB id = "b1"/>[/b]
    4.           <BBB name = " bbb "/>
    5.           <BBB name = "bbb"/>
    6. </AAA>
    7.  
     
  3. Waynez

    Waynez Активный пользователь

    С нами с:
    10 мар 2009
    Сообщения:
    12
    Симпатии:
    0
    aa.xml
    Код (Text):
    1. <root>
    2.  <comms id='11'>
    3.   <comment>
    4.     <date>09.03.09 11:33</date>
    5.     <text>aaa</text>
    6.   </comment>
    7.   <comment>
    8.     <date>09.03.09 11:33</date>
    9.     <text>aaa</text>
    10.   </comment>
    11.  </comms>
    12.  
    13.  <comms id='22'>
    14.   <comment>
    15.     <date>09.03.09 11:59</date>
    16.     <text>asdad</text>
    17.   </comment>
    18.  </comms>
    19. </root>

    PHP:
    1.  
    2. $comm_doc = new DOMDocument('1.0');
    3. $comm_doc->load('aa.xml');
    4. $comm_xpath = new DOMXpath($comm_doc);
    5.  
    6. foreach($comm_xpath->query('//comms[@img='11']/comment') as $comment)
    7.                  {
    8.                  echo $comment->text; [b]// вопрос о этой строке...[/b]
    9.                  }
    10.  
    Таким образом с simplexml всё рабоатет, а с DOM нет. Как мне вывести значения элемента <text> из XML?
     
  4. Frozen

    Frozen Активный пользователь

    С нами с:
    20 окт 2008
    Сообщения:
    540
    Симпатии:
    0
    Адрес:
    Москва
    print_r($comment);
    что выдает? какой класс? какие свойства?
    смотри свойства, гугли методы
     
  5. Waynez

    Waynez Активный пользователь

    С нами с:
    10 мар 2009
    Сообщения:
    12
    Симпатии:
    0
    print_r $comment:
    DOMElement Object ( )


    получается единственный способ вывести значение <text>'a это так?:

    PHP:
    1.  
    2. $comm_doc = new DOMDocument('1.0');
    3. $comm_doc->load('aa.xml');
    4. $comm_xpath = new DOMXpath($comm_doc);
    5.  
    6. foreach($comm_xpath->query('//comms[@img='11']/comment') as $comment)
    7. {
    8. $gettext = $comment->getElementsByTagName('text')->item(0);
    9. echo $gettext->nodeValue;
    10. }
    11.  
    Иначе никак? Ибо с simplexml тоже самое в двуx коммандаx можно было добиться... =\