Заменить значение элемента в DOM - PullRequest
1 голос
/ 22 мая 2019

Я хочу сохранить значение тегов DOM в существующем XML, я нашел функцию замены, но она в js, и мне нужна функция в PHP

Я пробовал функции save и saveXML, но это нене работал.У меня есть теги в XML с двоеточием "iaiext: auction_title".Я использовал getElement, и это хорошо работает, затем я сократил заголовок до 50 символов. Также работает функция, но как я могу заменить старый заголовок на новый, если я не использую путь, как simple_load_file.Как показать в моем скрипте этот путь?


$dom = new DOMDocument;
$dom->load('p.xml');
$i = 0;
$tytuly = $dom->getElementsByTagName('auction_title');
foreach ($tytuly as $tytul){

    $title = $tytul->nodeValue;
    $end_title = doTitleCut($title);
    //echo "<pre>";
    //echo($end_title);
    //echo "<pre>";
    $i = $i+1;
}

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Это тот же базовый API в PHP. Однако браузеры реализуют больше или другие части API. Вот 5 версий API (DOM уровня 1-4 и DOM LS). DOM 3 добавил свойство для чтения / записи текстового содержимого узла: https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent

В следующем примере префиксы заголовков:

$xml = <<<'XML'
<auctions>
  <auction_title>World!</auction_title>
  <auction_title>World &amp; Universe!</auction_title>
</auctions>
XML;

$document = new DOMDocument();
$document->loadXML($xml);

$titleNodes = $document->getElementsByTagName('auction_title');
foreach ($titleNodes as $titleNode) {
    $title = $titleNode->textContent;
    $titleNode->textContent = 'Hello '.$title;
}

echo $document->saveXML();

Выход:

<?xml version="1.0"?> 
<auctions> 
  <auction_title>Hello World!</auction_title> 
  <auction_title>Hello World &amp; Universe!</auction_title> 
</auctions>

PHPs DOMNode::$nodeValue реализация не соответствует определению W3C API. Он ведет себя так же, как DOMNode::$textContent для чтения, и не полностью сбрасывается при записи.

0 голосов
/ 22 мая 2019

В вашем цикле вы можете обновить значение определенного узла так же, как вы его выбираете - с помощью nodeValue.Так что в вашем цикле, просто обновляйте его каждый раз ...

$tytul->nodeValue = doTitleCut($title);

Затем, после цикла, вы можете просто отобразить новый XML, используя

echo $dom->saveXML();

или сохранить его, используя

$dom->save("3.xml");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...