2013-12-11 2 views
1

입력 :xml 파일에 한 줄 추가 방법?

<?xml version='1.0'?> 
<root> 
<category cname='Cname1' id='c1'> 
    <subcat key='3' sname='Subname1' sid='sid1'> 
    <prod key='1' pname='Productname'>value1</prod> 
    </subcat> 
</category> 
</root> 

출력은 아래에 언급되어야한다는 :

<?xml version='1.0'?> 
    <root> 
    <category cname='Cname1' id='c1'> 
     <subcat key='3' sname='Subname1' sid='sid1'> 
     <prod key='1' pname='Productname'>value1</prod> 
     **<prod key='2' pname='Productname1'>value2</prod>** 
     </subcat> 
    </category> 
    </root> 

나는이 하나를 추가 할 파일 : 소리내어 먹는다 모듈을 사용했다. 하지만이 출력을 얻기 위해 Xml :: Simple 또는 Xml :: Twig를 사용하고 싶습니다.

도와주세요.

미리 감사드립니다.

+2

"하지만 내가 사용하려는 이 출력을 얻으려면 Xml :: Simple 또는 Xml :: Twig를 사용하십시오. " - 글쎄, 가서 사용해라. 어떤 특별한 문제가 있습니까? – Mat

+0

XML은 구조화 된 데이터입니다. XML 조작 라이브러리를 사용하십시오. 즉, 거기서부터 시작하십시오. - 도둑질이나 직접적인 텍스트 기반 작업이 아닙니다. – user2864740

+1

@Mat을 입력하면이 작업을 위해 해당 카테고리 이름, 하위 고양이 이름과 일치해야합니다. 내 파일에 여러 하위 카테고리가 있습니다. 아래 순서를 확인해야합니다. 범주 -> 하위 범주 -> 새 줄을 추가하십시오. – Vasanth

답변

1

이와 비슷한? 여기

use strict; 
use warnings; 

use XML::Twig; 

my $twig = XML::Twig->new(
    pretty_print => 'indented', 
    twig_handlers => { 

    # When we get to the end of a <root> or <category> element, 
    # output everything we've processed so far. 
    'root|category' => sub { $_[0]->flush }, 

    # When a <subcat> element is encountered... 
    'subcat' => sub { 
     # Create a new element 
     my $new = XML::Twig::Elt->new(
     "prod", 
     { 
      key => 1, 
      pname => "Productname1", 
     }, 
     "value2", 
    ); 
     # Insert it at the end... 
     $new->paste(after => $_->last_child); 
    }, 
    }, 
); 
$twig->parse(\*DATA); 

__DATA__ 
<?xml version='1.0'?> 
<root> 
<category cname='Cname1' id='c1'> 
    <subcat key='3' sname='Subname1' sid='sid1'> 
    <prod key='1' pname='Productname'>value1</prod> 
    </subcat> 
</category> 
</root> 
0

난 당신이이 파일에 삽입 할 위치를 포함하여, 새로운 제품에 대한 모든 데이터가 이미 가지고 제공, 어떻게 할 것입니다 :

#!/usr/bin/perl 

use strict; 
use warnings; 

use XML::Twig; 

my $p= { category => 'Cname1', subcat => '3', 
     key => '2', pname => 'Productname1', value => 'value2' 
     }; 

# XPath selecting the appropriate subcat 
my $change= qq{category[\@cname="$p->{category}"]/subcat[\@key="$p->{subcat}"]}; 

XML::Twig->new(twig_handlers => { $change => sub { new_product(@_, $p); } }, 
       pretty_print => 'indented' 
      ) 
      ->parsefile('products.xml') 
      ->print; 

sub new_product 
    { my($t, $subcat, $p)= @_; 
    $subcat->insert_new_elt(last_child => prod => 
           { pname => $p->{pname}, key => $p->{key} }, 
           $p->{value} 
          ); 
    } 
+0

작동하지 않습니다 .... – Vasanth

+0

너무 많은 정보입니다 – mirod

+0

pls는 전체 코드를 공유합니다 .. – Vasanth