Изменить XML-контент с помощью XML Parser PHP - PullRequest
1 голос
/ 27 декабря 2010

У меня довольно большой XML-файл.Я анализирую его с помощью XML Parser с использованием Php.С парсингом XML все в порядке, я могу читать данные.Тем не менее, я понятия не имею, изменение содержимого одного тега.Должен ли я прочитать все данные в строку и переписать файл с измененным?Есть ли другие решения?Я не хочу использовать simplexml из-за размера файла.

Например, я хотел бы сменить Джека на имя другого пользователя.

Джек

Спасибо ..

Пока:

$file = "5.xml";



function startElement($parser, $name, $attrs) 
{
//do something

}

function contents($parser, $data){
//do something

} 

function endElement($parser, $name) 
{
//do something
}


$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "contents"); 
if (!($fp = fopen($file, "r"))) {
    die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
    if (!xml_parse($xml_parser, $data, feof($fp))) {
        die(sprintf("XML error: %s at line %d",
                    xml_error_string(xml_get_error_code($xml_parser)),
                    xml_get_current_line_number($xml_parser)));
    }
}
xml_parser_free($xml_parser);

1 Ответ

0 голосов
/ 12 апреля 2011

Поскольку это большой XML-файл, XMLParser - правильный инструмент.

Если вы хотите изменить содержимое тега, вам нужно сохранить текущее имя тега в startElement и вывести другое содержимое в contents, когда вы встретите тег, который хотите изменить.

startElement: $this->currentTag = $name;
contents: $this->currentTag == 'myspecialtag' ? print(md5($data)) : print($data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...