2011-08-04 3 views
0

XML 파일로 가득 찬 폴더가 있습니다. 각 노드에서 동일한 노드의 노드 값을 가져와이 값을 단일 텍스트 파일에 목록으로 써야합니다.XML 파일 폴더에서 XML 노드 값을 추출 하시겠습니까?

즉, 이러한 파일에는 모두 노드가 있습니다. 하나의 텍스트 파일에 모든 userid 값 목록이 필요합니다.

프로세스가 필요하지 않습니다. 한 번만 수행되므로 OSX/Unix에있는 파일 폴더에서 실행할 수있는 셸 스크립트를 찾으려고했습니다.

+4

원하는 출력의 입력과 형식의 예가 도움이 될 것이다. –

답변

1

이를 위해 펄을 사용할 수는, 이러한 파일

$ ls xml/*.xml 
xml/1312537177.xml xml/1312537179.xml xml/1312537182.xml 

말할 수 있습니다 이이 간단한 bash는 명령

$ for i in $(ls xml/*.xml); do cat $i | perl -M'XML::Bare' -e "local($/); print ((new XML::Bare(text => <STDIN>))->parse()->{'somenode'}{'userid'}{'value'});print \"\n\""; done; 
1312537177 
1312537179 
1312537182 

당신이 할 수를 사용하여 콘텐츠

$ cat xml/*.xml 
<?xml version="1.0" encoding="UTF-8" ?> 
<somenode><userid>1312537177</userid><otherstuff>fsadfadsf</otherstuff></somenode> 

<?xml version="1.0" encoding="UTF-8" ?> 
<somenode><userid>1312537179</userid><otherstuff>fsadfadsf</otherstuff></somenode> 

<?xml version="1.0" encoding="UTF-8" ?> 
<somenode><userid>1312537182</userid><otherstuff>fsadfadsf</otherstuff></somenode> 

입니다 userid 노드의 내용을 가져옵니다.

물론 xml 구조에 맞게 명령을 변경해야합니다.

아직 컴퓨터에 XML :: Bare perl 모듈이 설치되어 있지 않은 경우이 모듈을 설치해야 할 수도 있습니다. XML의 구조가 고정되어 있지 않으면 find_node 함수 http://metacpan.org/pod/XML::Bare을 사용할 수 있습니다. (나는 perl v5.10.1을 설치했다)

희망이있다.