2016-02-01 2 views
-1

Как с perl изменить значение элемента html с помощью идентификатора элемента html. Как вы это делаете в коде.Perl: Изменение элемента html Ярлык по ID

Например:

 <div id="container"> 
      <form id="form" action="../code.cgi" method="post"> 
       <label id="lblMessage" class="text">Message</label> 
      </form> 
     </div> 

Как бы я изменил текст лейбла в моем PERL скрипт?

+0

возможно дубликат https://stackoverflow.com/questions/8411684/xmllibxml-replace-element-value – Robert

+0

@Robert, что вопрос на самом деле более конкретный случай этот (ограничивается XML :: LibXML). Кроме того, этот вопрос хорошо сформулирован и хорошо принят для дальнейшего использования. Если один из двух должен быть закрыт, я предпочел бы, чтобы он был другим (хотя главный ответ с> 10 голосами - мой). – ikegami

ответ

2

Получить HTML или XML parser найти элемент (например, XPath expression) и удалить все его дочерние текстовые узлы и добавить новый текстовый узел с нужным текстом.

use strict; 
use warnings; 
use XML::LibXML; 

my $dom = XML::LibXML->load_html(location => 'myfile.html'); 
my $xpath = XML::LibXML::XPathContext->new($dom); 
foreach my $label ($xpath->findnodes('//label[@id="lblMessage"]')) { 
    $label->removeChildNodes(); 
    $label->addChild($dom->createTextNode("new text")); 
} 

Оговорка: если есть другие узлы (элементы, такие как <b> или <span>) в наклейке, они удаляются, а также.

Возможно, вам потребуется добавить код, чтобы записать измененный html в файл.

+0

Существует ярлык, который можно использовать здесь: '$ label-> appendText (« новый текст »);' – ikegami

1

Я лично, как HTML::TreeBuilder для такого рода задач.

use HTML::TreeBuilder; 

my $html = <<END; 
    <div id="container"> 
     <form id="form" action="../code.cgi" method="post"> 
      <label id="lblMessage" class="text">Message</label> 
     </form> 
    </div> 
END 

my $root = HTML::TreeBuilder->new_from_content($html); 
$root->elementify(); # Become a tree of HTML::Element objects. 

my $message = $root->find_by_attribute('id', 'lblMessage') 
    or die "No such element"; 

$message->delete_content(); 
$message->push_content('I am new stuff'); 

print $root->as_HTML(); 
Смежные вопросы