Заменить значение элемента в DOM

Я хочу сохранить значение тегов 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;
}

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

mickmackusa 22.05.2019 12:12
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Что нового в PHP 8.1?
Что нового в PHP 8.1?
Если вы все еще используете PHP 7, то эта статья для вас. В PHP 8, а именно в PHP 8.1, встроены некоторые очень востребованные функции, которые вам...
Разработка LMS на заказ для повышения эффективности работы и обучения
Разработка LMS на заказ для повышения эффективности работы и обучения
За последние годы в образовании произошла большая революция, и сегодня почти все учебные заведения делают упор на эксклюзивное управление учебным...
1
1
83
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

echo $dom->saveXML();

или сохраните его с помощью

$dom->save("3.xml");

Это тот же базовый API в PHP. Однако браузеры реализуют те или иные части API. Вот 5 версий API (DOM Level 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>

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

Другие вопросы по теме