2012-01-16 4 views
-1

XML 파일이 여러 개 있는데, 특정 태그의 텍스트가 번역되어서는 안되는 부분이 있습니다. 다행히도, 이전의 태그에는 동일한 텍스트 (번역되지 않은)가 존재합니다.XML 파일의 태그 사이에서 텍스트를 찾고이 텍스트를 동일한 파일의 다른 태그 세트에 복사하십시오.

올바른 텍스트

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

그래서 복사 및 대체 붙여 넣을 수 있습니다

입니다. 교체 할

태그 텍스트 내가 많이 주시면 감사하겠습니다 파일을 대량으로이를 구현하기 위해 펄 때문에 특정 코드에 분명히 새로운 오전

<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

흠. 태그의 상대적 위치는 여전히 명확하지 않습니다. 네임 스페이스 접두사는 솔루션을 약간 못 생기게 만듭니다. 먼저 'register-namespace'를 먼저 만들어야합니다. – choroba

+0

엄격한 사용; 경고를 사용하십시오. 파일 사용 :: 찾기; my $ doctype = 'xml'; my $ startdir = './'; my ($ s_Source) = "test.xml"; open (IN, "<$ s_Source") 또는 죽는 "$!"; foreach (map {/ (. *?))) { print $ _, "\ n"; my $ found = $ _; $을 찾았습니다. "\ n"; 찾기 ( 서브 {(/\.$doctype$/i) 않는 창; 로컬 @ARGV = $ _; 로컬 $^I = '.bac'; 하면서 (<>) { 경우 (S/ (. *?) $ 발견 Slinner

관련 문제