2012-01-16 5 views
-1

特定のタグのテキストが翻訳されていないxmlファイルがあります。幸いにも、同じテキスト(未翻訳)が前のタグに存在します。XMLファイル内のタグ間でテキストを検索し、同じファイル内の別のタグセットにこのテキストをコピーします

正しいテキストは

<tcm:Title>Correct Text</tcm:Title> 

にので代わりとしてコピーして貼り付けることができています。交換する

タグテキストは、私ははるかに高く評価されるファイルの大量にこれを実装するためのPerlので、特定のコードに明らかに新しいです

<productService>Incorrect Text</productService>. 

です。

答えて

2

私は通常XML処理にXML :: XSH2を使用します。このファイルで作業

<r> 
<correct>untranslated</correct> 
<incorrect>translated</incorrect> 

<correct>untranslated2</correct> 
<incorrect>translated2</incorrect> 
</r> 

スクリプトは、その後行われます

open file.xml ; 
for //incorrect cp preceding-sibling::correct[1]/text() replace text() ; 
+0

Choroba - 多くの謝罪を、私は、タグ・マークは、私が「didnのよう質問から行方不明になったことに気づいていませんでした問題の別の行にそれらを置く。もう一度お読みください。ありがとう! – Slinner

+0

Hm。タグの相対位置はまだ不明です。名前空間の接頭辞は、ソリューションを少し醜いものにします。最初に 'register-namespace'を実行する必要があります。 – choroba

+0

strictを使用します。 警告を使用します。 File :: Findを使用します。 my $ doctype = 'xml'; my $ startdir = './'; my($ s_Source)= "test.xml"; open(IN、 "<$ s_Source")または死ぬ "$!"; foreach(map {/ (。*?))){ print $ _、 "\ n"; my $ found = $ _; print $が見つかりました。 "\ n"; 検索( サブ{リターン(/\.$doctype$/i)ない限り、 ローカル@ARGV = $ _; ローカル$^I = '.bac'; ながら(<>){ IF( ($ *))$ {/ ig}){ プリント; } else { プリント; }}}、$ startdir); // (。*? "完了しました"; }; 閉じる(IN); – Slinner

関連する問題