2016-12-12 8 views
0

私は2つのXMLファイルを持っているが、この

file1.xml`perl`で` xml`タグを検索するには?

< uf>232< /uf> 
< boid>32892< /boid> 
< end> End of xml 1 < /end> 



file2.xml

< id> 232 < /id> 
< boid>< /boid> 
< end> End of xml 2 < /end> 



0のようになります< boid>タグがfile1.xmlの数字をコピーし、< boid>タグをfile2.xmlと書き込む関数をperlに書く必要があります。

open(my $vt_open1 ,'<' "file1.xml");<br> 
open(my $vt_open2 ,'+>' "file2.xml");<br> 
select $vt_open2 or die $!; 
while($vt_open1){ 
    if ($. == 2) { 
     print $vt_open1; 
    } 

}

これが動作していないと、ファイル全体を書いている:
問題は、私は、私はこのような何かを試してみました 、その拡張として任意の解析モジュールを含めることが許されておりませんです。
私はロジックを見つけるのに問題があり、行番号を使用しても良いロジックではありません。
私はperlを使い慣れていません。

+2

この記事は、以前の記事のように、不完全にフォーマットし、理解することは困難です。あなたの投稿を4スペースでインデントしてコードを表示します。あなたの質問をフォーマットするためにHTMLを使用する必要はありません。 – mob

+1

なぜ解析モジュールを使用できないのですか? 「エンハンスメント」とは、「質、価値、程度の増減」を意味し、私はそれを否定的に解釈するのが難しいと感じます。 – choroba

+0

私は、制作envの制限についていくつかのコメントを得ていましたが、私は主張しましたが、希望はありません:( – Husk01inJun

答えて

3

Do not。ライブラリを使用する。真剣に。 It's an utterly terrible idea to hack together your own parser just because you don't want to install one. XMLはコンテキストに依存します。正規表現はありません。 xpathが存在するので、正規表現でXMLを解析するための汚いハックよりも優れていることは決してありません。

ほとんどの標準ディストリビューションにはパッケージとしてXML::Twigが含まれているため、CPANする必要はありません。それとも、「ローカル」、それをインストールすることができます。

"How do I keep my own module library/directory"

あなたは常にはこれを行うことにより、脆いコードを作成します。

しかし、私はそこにしてきたし、それをやって捕まってしまったというだけの理由:

#!/usr/bin/env perl 
use strict; 
use warnings; 

my $xml1 = ' 
<xml> 
<uf>232</uf> 
<boid>32892</boid> 
<end> End of xml 1 </end> 
</xml>'; 

my ($boid_value) = $xml1=~ m,<boid>([^<]+)</boid>,ms; 
print $boid_value; 

my $xml2 = ' 
<xml> 
<uf>232</uf> 
<boid></boid> 
<end> End of xml 2 </end> 
</xml>'; 

$xml2 =~ s,<boid>[^<]*</boid>,<boid>$boid_value</boid>,ms; 

print "Modified XML is:\n"; 
print $xml2; 

私はこのことを警告します - これは常に危険な選択となりますし、一日完全に破損する可能性が、あなたができるので、意味的に同一のさまざまな方法でXMLを再フォーマットします。または、誰かが<boid>に属性を追加したり、それと似たようなものを追加したりすることがあります。比較のために

からXML::Twigと、これは次のようになります。

#!/usr/bin/env perl 
use strict; 
use warnings; 

use XML::Twig; 

my $xml1 = ' 
<xml> 
<uf>232</uf> 
<boid>32892</boid> 
<end> End of xml 1 </end> 
</xml>'; 

my $xml2 = ' 
<xml> 
<uf>232</uf> 
<boid></boid> 
<end> End of xml 2 </end> 
</xml>'; 

my $twig = XML::Twig -> new -> parse ($xml1); 
my $second_xml = XML::Twig -> new -> parse ($xml2); 

my $boid_value = $twig -> get_xpath('//boid',0)->text; 

$_ -> set_text($boid_value) for $second_xml->get_xpath('//boid'); 

$second_xml -> set_pretty_print('indented'); 
$second_xml -> print; 
+0

for html(xml)、私はお勧めします:Mojo :: DOMまたはHTML :: TreeBuilder – 3ED

関連する問題