2012-06-18 3 views
1

큰 파일을 변환하는 수동 작업을 줄이기 위해 XML 파일을 Eclipse 내의 SQL 문으로 변환하려고합니다.Eclipse regexp에서 반복되는 패턴 일치

<TABLE_NAME COL_1="value1" COL_2="value2"/> 

가로 변환해야합니다 :

라인 등 지금까지

insert into TABLE_NAME (COL_1, COL_2) values ("value1", "value2"); 

, 나는 일치 테이블 이름 및 첫 번째 열/값 쌍을 포착하는 데 성공했다 : 끝 부분 .*

<(\w+)(\w+)=(".+?").*/> 

는 patte의 첫 번째 부분을 테스트하기 위해 단지 거기 rn이며 완료되면 제거해야합니다.

패턴을 대체 산출 다음 다음과 같은 결과 :

insert into $1 ($2) values ($3); 
insert into TABLE_NAME (COL_1) values ("value1"); 

제가하는 데 문제는 열 수가 다른 테이블에 대해 서로 다른 것을, 그래서 N 일치하는 것이다 일반적인 패턴을 싶습니다 열과 값의 쌍을 사용하고 캡처 된 그룹을 반복적으로 사용합니다. \G이 좋은 후보 인 것 같지만 아직까지 어떻게해야하는지 이해하지 못했습니다.

이상적으로 이것은 하나의 regexp 문에서 해결할 수 있습니다.하지만 순차적으로 실행해야하는 여러 명령문과는 반대가되지는 않을 것입니다. (실제로 개발자가 한 번 실행하도록 강요하고 싶지는 않지만 모든 열/값 쌍에 대해).

누구든지 아이디어가 있습니까?

+3

제 경험상 XML 변환에 XSLT를 사용하는 것이 더 좋습니다.단일 정규식으로이 문제를 해결할 수 있을지는 모르겠지만 간단한 Java 프로그램과 여러 정규식 (예를 들어 하나는 테이블과 하나의 열에 대해 하나)으로 먼 길을 갈 수 있습니다. –

+0

@Benjamin 팁 주셔서 감사합니다. XSLT를 살펴 보겠습니다. 나는 전에 그것을 사용한 적이 없다. regexp와 Perl에 대한 경험이 있기 때문에 첫 번째 반응은 그것을 사용하는 것이 었습니다. 이 경우에는 사용할 수있는 최상의 도구가 아닐 수도 있습니다. –

답변

0

나는 원래 구상 한 정규 표현식으로이를 해결하지 못했습니다. 대체 솔루션을 염두에두고 결국 테스트 코드를 재사용하여 재사용 가능하도록 만든 다음 dbunit을 선택하여 테스트를 사용하여 개발 데이터베이스의 여러 단계에 데이터를 쓰게했습니다.

이것은 테스트의 오용이라고 알고 있지만 사용자가 데이터 삽입 여부에 대한 녹색/빨간색 피드백을 받고 동일한 테스트 데이터를 삽입 할 수 있기 때문에 모든 것을 훨씬 간단하게 만듭니다. 자동화 된 구성 요소/통합 테스트 (인 메모리 데이터베이스와 함께 dbunit 사용)와 같은 수동 승인 테스트. 이러한 가짜 테스트 클래스가 테스트 스위트에 추가되지 않는 한, 이들은 수동으로 만 실행됩니다.

public class MyComponentTestDataInserter extends DataInserter { 
    @Override 
    protected String getDeleteSql() { 
    return "./input/component/delete.sql"; 
    } 

    @Override 
    protected String getInsertXml() { 
    return "./input/component/TestData.xml"; 
    } 

    @Test 
    public void insertIntoDevStage() { 
    insertData(Environment.DEV); 
    } 

    @Test 
    public void insertIntoTestStage() { 
    insertData(Environment.TEST); 
    } 
} 

는 개발자가 단순히 하나의 테스트를 실행하여 단일 환경에서 데이터를 삽입 할 수있는 추가 이점이 있었다이 :

결과 가짜 테스트는 예를 들어, 매우 간단하고 가벼운 었죠 IDE의 상황에 맞는 메뉴를 통해 동시에 전체 테스트 클래스를 실행하여 정확한 동일한 데이터를 모든 환경에 동시에 배포 할 수 있습니다.

또한 데이터 정리 또는 삽입 중 임의의 지점에서 오류가 발생하면 전체 트랜잭션이 롤백되어 일관성없는 상태가되지 않습니다.