Я хочу сохранить значение тегов 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;
}
В своем цикле вы можете обновить значение определенного узла так же, как вы его извлекаете — с помощью 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 & 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 & Universe!</auction_title>
</auctions>
Реализация PHP DOMNode::$nodeValue
не соответствует определению W3C API. Он ведет себя так же, как DOMNode::$textContent
для чтения и не полностью экранируется при записи.
Хороший, полный, поддающийся проверке вопрос предлагает минимальную репрезентативную выборку входной строки, а затем предлагает точный ожидаемый результат на основе входной строки и логики обработки.