В Perl, как я могу изменить элемент в XML-файле, не изменяя формат XML-файла?

Пакет может быть сниффинговым абсолютно где угодно на маршруте между клиентом и сервером. Взломщик просто должен получить физический доступ к одной из тех сетей.

, Очевидно, чем ближе Вы к 'соединительной линии' (ISP), а не 'лист' (Домашний маршрутизатор, домашний компьютер), тем большего количества материала можно осуществить сниффинг.

Со спуфингом DNS, взломщик может изменить тот маршрут так, чтобы он прошел через систему, которой они управляют.

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

5
задан Sinan Ünür 25 August 2009 в 12:15
поделиться

4 ответа

XML :: Simple имеет параметры, которые позволяют указать, как ввод будет преобразован в Структура данных Perl и то, как эта структура будет выводиться:

#!/usr/bin/perl

use strict;
use warnings;

use XML::Simple;

my $xml_file = 'b.xml';

my $xml = XMLin(
    $xml_file,
    KeepRoot => 1,
    ForceArray => 1,
);

$xml->{outer1}->[0]->{inner1}->[1]->{name} = 'Shane Bond';

XMLout(
    $xml,
    KeepRoot => 1,
    NoAttr => 1,
    OutputFile => $xml_file,
);

XML :: Simple действительно становится немного непростым, если вы делаете что-нибудь интересное, потому что его цель - не быть XML-библиотекой общего назначения, а предоставить простой способ работают с файлами конфигурации, написанными в XML.

CPAN имеет множество модулей, связанных с XML . Если это не единственная проблема, с которой вам пришлось столкнуться, стоит изучить некоторые из более функциональных и подходящих модулей.

4
ответ дан 18 December 2019 в 07:55
поделиться

Когда дело доходит до чтения или изменения XML-файла, то XML :: Twig часто оказывается первым инструментом, который я хочу использовать.

Сначала я подумал, что это может быть излишним для ваших требований, но потом я заметил, что в нем есть опция parsefile_inplace ():

use strict;
use warnings;
use XML::Twig;

XML::Twig->new(
    pretty_print  => 'indented',
    twig_handlers => { 
        name => sub { 
            $_->set_text( 'Shane Bond' )->flush  if $_->text eq 'Shanebond' 
        },
    },
)->parsefile_inplace( 'data.xml', 'bak_*' );

NB. Если вы не хотите сохранять файл резервной копии, удалите второй аргумент ('bak _ *').

8
ответ дан 18 December 2019 в 07:55
поделиться

Вы пробовали XMLout с OutputFile

Из документации для XML :: Simple:

По умолчанию функция XMLout () возвращает XML в виде строки. Если вы хотите записать XML в файл, просто укажите имя файла с помощью параметра «OutputFile».
Этот параметр также принимает объект дескриптора ввода-вывода - особенно полезно в Perl 5.8.0 и более поздних версиях для вывода с использованием кодировки, отличной от UTF-8, например:

open my $fh, '>:encoding(iso-8859-1)', $path or die "open($path): $!";
XMLout($ref, OutputFile => $fh);
3
ответ дан 18 December 2019 в 07:55
поделиться

Зачем вообще обрабатывать его как XML? Почему бы просто не выполнить regexp-replace?

perl -pi -e 's/Shanebond/Shane Bond/' filename.xml

Это сделает замену на месте, сохраняя то же имя файла и все остальное.

5
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: