XML 요소의 내용을 업데이트하려고합니다. XML :: LibXML을 사용하고 있으며이 라이브러리를 사용해야합니다. 다음은 몇 가지 샘플 데이터입니다. 내가하고 싶은 무엇Perl XML :: LibXML 업데이트 컨택
<data-table>
<data>
<number>1</number>
<letter>one</letter>
</data>
<data>
<number>2</number>
<letter>two</letter>
</data>
</data-table>
는 편지의 내용을 변경되는 수가 2. 그러나 나는 그것이 작동하기는 XPath를 지정하는 데 문제가있어 생각이다 "퍼플"합니다. 나는
이내가 일 동안 고민 했어요 "에서"XML :: LibXML :: NodeList를 "패키지를 통해"사항 setData "개체 방법을 찾을 수 없습니다 것은"그래서 어떤 도움이 크게되는 다음과 같은 오류를 얻을 고맙습니다.
use XML::LibXML;
my $p = XML::LibXML->new;
my $d = $p->parse_fh(\*DATA);
for my $node ($d->findnodes('//data-table/data'))
{
for my $childNode ($node->findnodes('./number/text()'))
{
if($childNode->textContent() == '1')
{ # here is where the problem is!
my $changeNumerNode = $node->findnodes('./letter/text()');
$changeNumerNode->setData("Purple");
}
}
}
print $d->toString;
__DATA__
<data-table>
<data>
<number>1</number>
<letter>one</letter>
</data>
<data>
<number>2</number>
<letter>two</letter>
</data>
</data-table>
는'findnodes' 노드를 반환하지 않습니다 사용할 수
. 노드 또는 NodeList의 목록을 반환합니다. 링크 된 질문에 대한 답변을 참조하십시오. – ikegami
감사합니다. 나는 내 수색에서 그것을 보았다. 노드를 삭제할 수는 없습니다. findnodes가 노드를 반환하지 않는다는 것을 알지만 노드를 가져온 후에 루프를 돌리고 있는데 왜 그 노드에서 하나의 작업을 수행 할 수 없습니까? 그것이 내가 이해하지 못하는 부분입니다. 또는 첫 번째 장소에서 올바른 방법으로 이동하십시오. 그렇다면 의 모든 하위 노드를 찾은 다음 일치 항목을 찾은 다음 의 모든 하위 노드를 다시 생성해야합니까? 그것은 나의 과도한 시나리오에서 효율적이지 않을 것입니다. – ScottEdge
링크 된 게시물에서 노드를 얻는 방법을 보여주지 못했던 것 같습니다. – ikegami