Как вырезать текст между двумя тэгами в xml/yml на php?
Добрый вечер, есть xml файл который скачивается по curl или file_get в нем нужно удалить все что есть между тегами description
то есть есть
<description>текст текст текст текст</description>
должно быть
<description></description>
или вообще все вместе с этими тегами.
нашла в сети вот это, похожее что мне надо, пробовала, не получилось (
$domDoc = new DOMDocument(); $domDoc->loadXML($xml); //create XPath object to navigate through the XML content. $xpath = new DOMXPath($domDoc); foreach ($xpath->query("//description") as $domNode) { $domNode->nodeValue = ''; } $xml = $domDoc->saveXML(); |
$domDoc = new DOMDocument(); $domDoc->loadXML($xml); //create XPath object to navigate through the XML content. $xpath = new DOMXPath($domDoc); foreach ($xpath->query("//description") as $domNode) { $domNode->nodeValue = ''; } $xml = $domDoc->saveXML();
Спасибо.
Дополнительно:
в общем методом тыка нала решение, может кому пригодиться, по этому варианту
$domDoc = new DOMDocument(); $domDoc->load(ссылка на файл); //create XPath object to navigate through the XML content. $xpath = new DOMXPath($domDoc); foreach ($xpath->query("//d:description") as $domNode) { $domNode->nodeValue = ''; } $xml = $domDoc->save(); |
$domDoc = new DOMDocument(); $domDoc->load(ссылка на файл); //create XPath object to navigate through the XML content. $xpath = new DOMXPath($domDoc); foreach ($xpath->query("//d:description") as $domNode) { $domNode->nodeValue = ''; } $xml = $domDoc->save();
может есть и другие решения, оригинальнее, буду рада выслушать.
А сам тег description не хотите удалить?
Тогда вместо:
$domNode->nodeValue = '';
Нужно использовать:
$domNode->parentNode->removeChild($domNode);
И, возможно, в foreach в качестве итерируемого элемента нужен ссылочный тип:
as &$domNode
Ответы:
нашла еще вот такое решение
$xml=simplexml_load_file('1212.xml'); $xg=$xml->xpath("channel/item"); $xg[0]->description = ""; $xml->asXML('111.xml'); |
$xml=simplexml_load_file('1212.xml'); $xg=$xml->xpath("channel/item"); $xg[0]->description = ""; $xml->asXML('111.xml');
оно работает, но проблема в том что в файле тег description вот так
и если подставляю
$xg[0]->g:description = "";
то дает ошибку.
как можно это решить ?
- почитайте про namespaces https://www.w3schools.com/xml/xml_namespaces.asp
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для вырезания текста между двумя тегами в 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 строку, в которой нужно найти текст между тегами и . Затем мы используем регулярное выражение, чтобы найти и извлечь текст между этими тегами. Если текст найден, он будет выведен на экран, иначе будет выведено сообщение о том, что текст не найден.
Этот код можно легко адаптировать для работы с YAML файлами или другими форматами данных, используя соответствующие регулярные выражения и изменяя структуру данных.