Как можно изменить всю часть тела документа xml, загруженного в php через simplexml?

Предположим, что следующий XML-документ

<technicaldata template="123"> <name> <![CDATA[Blub1]]> </name> <numbers> <![CDATA[1 2 3 4 5]]> </numbers> <shortinfo> <![CDATA[ha ha ha ha ha ha ha ha.]]> </shortinfo> <detailedinfo> <![CDATA[hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi]]> </detailedinfo> </technicaldata> 

Теперь я загружаю файл через simplexml;

 $data='test.xml'; $inhalt = simplexml_load_file($datei); 

Но теперь $ inhalt – это объект, где я не могу использовать eg str_ireplace (string remove, string add, $ inhalt); Поэтому, если я, например, хочу что-то заменить, мне нужно войти в каждую часть документа xml, чтобы иметь возможность ее заменить;

Поэтому я делаю это:

 $name = $inhalt->name; $name = str_ireplace(string remove, string add,$name); $numbers = $inhalt ->numbers; $numbers = str_ireplace(string remove, string add,$numbers); $shortinfo=$inhalt ->shortinfo; str_ireplace(string remove, string add,$shortinfo); $detailedinfo=$inhalt ->detailedinfo; str_ireplace(string remove, string add,$detailedinfo); 

и так далее;

Итак, вы знаете, как я могу что-то заменить для всей части тела, а не только ее частей? Итак, некоторая версия:

 $inhalt = str_ireplace(string remove, string add,$inhalt); 

который в этом случае не работает?

Извините, я знаю, что это звучит совершенно просто и глупо, но я – чертов новичок;

Большое спасибо!! 🙂

Related of "Как можно изменить всю часть тела документа xml, загруженного в php через simplexml?"

вы можете пропустить все дочерние элементы вашего объекта xml следующим образом:

 foreach ($inhalt->children() as $child) { $child= str_ireplace(string remove, string add,$child); } 

Надеюсь, поможет

Это проще в DOM, потому что вы можете напрямую обращаться и изменять текстовые узлы (включая разделы CDATA):

 $document = new DOMDocument(); $document->loadXml($xml); $xpath = new DOMXpath($document); foreach ($xpath->evaluate('/technicaldata/*//text()') as $textNode) { $textNode->data = str_replace(['hi', 'ha'], ['foo', 'bar'], $textNode->data); } echo $document->saveXml(); 

Выражение Xpath

В элементе документа technicaldata извлекается любой элемент узла …

/technicaldata/*

… извлекать текстовый узел (простые разделы текста или cdata) внутри них:

/technicaldata/*//text()