редактировать XML с помощью SimpleXML - PullRequest
11 голосов
/ 19 января 2010

Как я могу редактировать значения в XML-файле, используя simpleXML?

Я знаю, как создать файл, но не как редактировать значение в существующем файле?

Ответы [ 4 ]

14 голосов
/ 19 января 2010

Конечно, вы можете редактировать с SimpleXML :

$input = <<<END
<?xml version='1.0' standalone='yes'?>
<documents>
  <document>
    <name>spec.doc</name>
  </document>
</documents>
END;

$xml = new SimpleXMLElement($input);
$xml->document[0]->name = 'spec.pdf';
$output = $xml->asXML();

Взгляните на примеров .

7 голосов
/ 19 января 2010

Загрузите ваш XML с SimpleXML и внесите изменения. Затем вы можете использовать метод asXML для сохранения XML в файл (вы передаете имя файла в качестве аргумента):

$xml = new SimpleXMLElement( $xmlString );
// do the manipulation here
$xml->asXML ( '/path/to/your/file.xml' );
4 голосов
/ 11 ноября 2010

Имейте в виду, что, хотя вы можете редактировать XML с помощью SimpleXML, существуют ограничения. Например, вы можете удалить или удалить узел или элемент. Вы можете очистить его так, чтобы он был пустым, но вы не можете полностью его устранить. Для этого вам нужен DOM или что-то в этом роде.

1 голос
/ 18 августа 2017

Я работаю так (это то же самое, но это может помочь): файл test.xml может иметь любое расширение, если он представляет собой простой текст XML.

test.xml:

<?xml version="1.0" encoding="utf-8"?>
<sitedata>
    <Texts>
        <ANode SomeAttr="Green" OtherAttr="Small"/>This is the text I'm changing.</ANode>
    </Texts>
</sitedata>

И код PHP:

$xml=simplexml_load_file("test.xml") or die("Error: Cannot create object");
$SomeVar="<b>Text. This supports html code.</b><br/>I also work with variables, like GET or POST.";
$xml->Texts[0]->{'ANode'}=$SomeVar;
$xml->asXml('test.xml');

Результаты test.xml:

<?xml version="1.0" encoding="utf-8"?>
<sitedata>
    <Texts>
    <ANode SomeAttr="Green" OtherAttr="Small"/>&lt;b&gt;Text. This supports html code.&lt;/b&gt;&lt;br/&gt;I also work with variables, like GET or POST.</ANode>
    </Texts>
</sitedata>

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

...