Получить доступ к дочернему значению с помощью libxml::xpathcontext
Я хочу получить доступ к значению дочернего элемента и изменить его. Это мой xml
<config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
<outer1 xmlns="http://blablabla" >
<inner>
<name>
<prenom>Hello</prenom>
</name>
<profession>warrior</profession>
</inner>
<inner>
<name>
<prenom>Hello</prenom>
</name>
<org>wwf</org>
<profession>warrior</profession>
</inner>
</outer1>
и это мой код
my $dom = XML::LibXML->load_xml( location => $xml);
my $context = XML::LibXML::XPathContext->new( $dom->documentElement() );
$context->registerNs( 'u' => '"urn:ietf:params:xml:ns:netconf:base:1.0' );
$context->registerNs( 'u' => 'http://blablabla');
for my $node ($context->findnodes('//u:inner') ) {
for my $node2 ($node->findnodes('//u:name') ) {
#if (($node->findnodes('u:name', $node2) ->size) != 1) {next;}
my ($mh) = $node->findnodes('u:prenom', $node2);
my $size = $node->findnodes('u:prenom', $node2) ->size;
print "size $size";
if ($size != 1) {next;}
$mh ->removeChildNodes();
$mh->appendText('World12456');
print "mh = $mh";
}
}
Я хочу получить доступ к prenom и изменить его на "World12456". С текущим кодом; Я получил эту ошибку Ошибка XPath: неопределенная ошибка префикса пространства имен: xmlXPathCompiledEval: оценка завершилась неудачно. Тогда я попробовал другой способ
for my $node ($context->findnodes('//u:inner') ) {
my ($mh) = $context->findnodes('u:name/prenom', $node);
my $size = $context->findnodes('u:name/prenom', $node) ->size;
print "size $size";
if ($size != 1) {next;}
$mh ->removeChildNodes();
$mh->appendText('World12456');
print "mh = $mh";
}
Тогда я получаю размер 0 для обоих. Он не находит тег prenom. С
for my $node ($context->findnodes('//u:inner/name')
Ничего не отображает
Извините, если это дубликат, но я пока не нашел ссылки для доступа к дочернему дочернему элементу с xpathcontext.
1 ответ
Я понял. Мне просто нужно поставить тебя для каждого элемента
for my $node ($context->findnodes('//u:inner/u:name')