나는 XML Simple
을 시도했지만 XML을 해시로 읽으므로 DTD에 대해 실행하면 출력물은 쓸모가 없습니다. 어려운 길을 배웠다.XML :: LibXML을 사용하여 CableLabs 1.0 XML 파일의 특정 부분을 찾아서 바꿉니다.
그래서 XML::LibXML
을 채택했습니다. 재미있는 점은 XML::Simple
으로 수행하기가 가장 어려웠던 요구 사항이 가장 쉽다는 것입니다. 그러나 나는 XML::Simple
에서 더 쉽게 할 수있는 것들 중 일부는 불가능하다는 것을 증명하고있다. DOM에 대한 나의 이해 부족과 XML::LibXML
과 같은 혼란스러운 행동들로 인해.
<Metadata>
<ADI Name="movie" />
<App_Data Name="Something I don't care about" value="who cares" />
<App_Data Name="Something I don't care about as well" value="who cares" />
<App_Data Name="ChangeMe" Value="" />
</Metadata>
<Metadata>
<ADI Name="photo" />
<App_Data Name="Something I don't care about" value="who cares" />
<App_Data Name="Something I don't care about as well" value="who cares" />
<App_Data Name="ChangeMe" Value="" />
</Metadata>
<Metadata>
<ADI Name="poster" />
<App_Data Name="Something I don't care about" value="who cares" />
<App_Data Name="Something I don't care about as well" value="who cares" />
<App_Data Name="ChangeMe" Value="" />
</Metadata>
참고 :
그래서 여기에 XML의 샘플입니다 나는이 게시물에 사용이 단순화했다.
그래서 기본적으로 나는 Name
이 ChangeMe
이다 년대 <App_Data>
태그의 Value
특성에 변화를 만들기 위해 내가 DOM의 올바른 영역에 있음을 확인하기 위해 <ADI>
태그에 Name
필드를 사용합니다.
이것은 내가 생각해 낸 코드 스 니펫입니다 ... 그리고 비참하게 실패했습니다.
#!/usr/bin/perl
use strict;
use XML::LibXML;
my $xml2 = XML::LibXML->new();
my $data = $xml2->parse_file("adi.xml");
my $movie;
my $photo;
my $poster;
foreach my $test ($data->findnodes('//Metadata')) {
if ($test->findvalues('./ADI/@Name[.="movie"]')){
$movie = 1;
undef $photo;
undef $poster;
}
elsif ($test->findvalues('./ADI/@Name[.="photo"]')){
undef $movie;
$photo = 1;
undef $poster;
}
elsif ($test->findvalues('./ADI/@Name[.="poster"]')){
undef $movie;
undef $photo;
$poster = 1;
}
}
작동하지 않기 때문에이 외에 아무것도 없습니다. 나는이 질문에 대한 보너스로
Can't locate object method "findvalues" via package "XML::LibXML::Element"
의 라인을 따라 오류 무언가를 얻을 내가 완전히 사진 및/또는 포스터에 포함 된 것들에 대한 <Metadata>
(모든 어린이)를 제거하기를 원한다면 무엇?
'미확정의 $ var에가,'펄이 추가 작업을 수행하는 원인이,''$ var에 = 미확정의 특별 버전입니다. 후자를 사용하십시오. – ikegami
일단' '로 무엇을 하려는지 명확하지 않으면'Metadata' 타입을 확인하십시오. 변화 후 어떻게 생겼을까요? –
doubleDown