Как вырезать текст между двумя тэгами в xml/yml на php?

Ссылка скопирована
1 ответ

Добрый вечер, есть xml файл который скачивается по curl или file_get в нем нужно удалить все что есть между тегами description
то есть есть
<description>текст текст текст текст</description>
должно быть
<description></description>
или вообще все вместе с этими тегами.
нашла в сети вот это, похожее что мне надо, пробовала, не получилось (

$domDoc = new DOMDocument(); $domDoc-&gt;loadXML($xml);  //create XPath object to navigate through the XML content. $xpath = new DOMXPath($domDoc);  foreach ($xpath-&gt;query("//description") as $domNode) {     $domNode-&gt;nodeValue = ''; } $xml = $domDoc-&gt;saveXML();

$domDoc = new DOMDocument(); $domDoc-&gt;loadXML($xml); //create XPath object to navigate through the XML content. $xpath = new DOMXPath($domDoc); foreach ($xpath-&gt;query("//description") as $domNode) { $domNode-&gt;nodeValue = ''; } $xml = $domDoc-&gt;saveXML();

Спасибо.

Дополнительно:

в общем методом тыка нала решение, может кому пригодиться, по этому варианту

$domDoc = new DOMDocument(); $domDoc-&gt;load(ссылка на файл);  //create XPath object to navigate through the XML content. $xpath = new DOMXPath($domDoc);  foreach ($xpath-&gt;query("//d:description") as $domNode) {     $domNode-&gt;nodeValue = ''; } $xml = $domDoc-&gt;save();

$domDoc = new DOMDocument(); $domDoc-&gt;load(ссылка на файл); //create XPath object to navigate through the XML content. $xpath = new DOMXPath($domDoc); foreach ($xpath-&gt;query("//d:description") as $domNode) { $domNode-&gt;nodeValue = ''; } $xml = $domDoc-&gt;save();

может есть и другие решения, оригинальнее, буду рада выслушать.

  • Оберните в тег code образец xml, что вы хотите изменить, а то ничего не видно.

    А сам тег description не хотите удалить?
    Тогда вместо:
    $domNode->nodeValue = '';
    Нужно использовать:
    $domNode->parentNode->removeChild($domNode);
    И, возможно, в foreach в качестве итерируемого элемента нужен ссылочный тип:
    as &$domNode

  • Вы бы хоть показали что запихиваете в $xml, а то мы еще должны разгадать, правильный ли там синтаксис и вложенность
  • Ответы:

    нашла еще вот такое решение

    $xml=simplexml_load_file('1212.xml');   $xg=$xml-&gt;xpath("channel/item");    $xg[0]-&gt;description = "";  $xml-&gt;asXML('111.xml');

    $xml=simplexml_load_file('1212.xml'); $xg=$xml-&gt;xpath("channel/item"); $xg[0]-&gt;description = ""; $xml-&gt;asXML('111.xml');

    оно работает, но проблема в том что в файле тег description вот так
    и если подставляю
    $xg[0]->g:description = "";
    то дает ошибку.
    как можно это решить ?

    • почитайте про namespaces https://www.w3schools.com/xml/xml_namespaces.asp
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Роман IT Ответ

    Для вырезания текста между двумя тегами в XML или YAML файле на PHP можно воспользоваться функцией preg_match() с регулярным выражением.

    Вот пример кода на PHP, который позволит вам вырезать текст между двумя тегами в XML или YAML файле:

    $xml = 'Text to extractAnother text';
     
    $tag = 'tag1'; // Тег, между которыми нужно вырезать текст
    $pattern = '/(.*?)/s'; // Регулярное выражение для поиска текста между тегами
     
    preg_match($pattern, $xml, $matches); // Находим текст между тегами
     
    if(isset($matches[1])) {
        $extractedText = $matches[1]; // Извлеченный текст
        echo $extractedText;
    } else {
        echo 'Текст между тегами не найден';
    }

    $xml = 'Text to extractAnother text'; $tag = 'tag1'; // Тег, между которыми нужно вырезать текст $pattern = '/(.*?)/s'; // Регулярное выражение для поиска текста между тегами preg_match($pattern, $xml, $matches); // Находим текст между тегами if(isset($matches[1])) { $extractedText = $matches[1]; // Извлеченный текст echo $extractedText; } else { echo 'Текст между тегами не найден'; }

    В этом примере мы указали XML строку, в которой нужно найти текст между тегами и . Затем мы используем регулярное выражение, чтобы найти и извлечь текст между этими тегами. Если текст найден, он будет выведен на экран, иначе будет выведено сообщение о том, что текст не найден.

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

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно