Notepad++ XML - 하위 태그 내용에 따라 조건부로 태그 삭제

Notepad++ XML - 하위 태그 내용에 따라 조건부로 태그 삭제

저는 Notepad++를 처음 접했고 Regex를 사용하여 필드의 특정 값을 검색하고 해당 상위 태그(및 필드를 포함한 모든 내용)를 삭제하려고 합니다.

기본적으로 특정 Store ID가 있는 거래를 제거하려고 합니다. 파일이 방대하고 제거해야 할 항목이 수천 개 있습니다. 아래 샘플을 참조하세요!

견본

<Transaction>
                              <TxnHeader>
                                             <StoreId>6705</StoreId>
                                             <TillNumber>1</TillNumber>
                                             <TxnNumber>343243</TxnNumber>
                                             <StartDate>2019-02-02T07:42:45</StartDate>
                                             <TxnType>1</TxnType>
                              </TxnHeader>
                              <TxnItemLines>
                                             <TxnItemLine>
                                                            <DetailSequence>1</DetailSequence>
                                                            <ItemNumber>6304</ItemNumber>
                                                            <DeptNumber>168</DeptNumber>
                                                            <Quantity>1.000000</Quantity>
                                                            <LineValue>4.470000</LineValue>
                                             </TxnItemLine>
                              </TxnItemLines>
               </Transaction>
               <Transaction>
                              <TxnHeader>
                                             <StoreId>8351</StoreId>
                                             <TillNumber>1</TillNumber>
                                             <TxnNumber>327527</TxnNumber>
                                             <StartDate>2019-02-02T08:02:47</StartDate>
                                             <TxnType>1</TxnType>
                              </TxnHeader>
                              <TxnItemLines>
                                             <TxnItemLine>
                                                            <DetailSequence>1</DetailSequence>
                                                            <ItemNumber>6304</ItemNumber>
                                                            <DeptNumber>168</DeptNumber>
                                                            <Quantity>1.000000</Quantity>
                                                            <LineValue>7.310000</LineValue>
                                             </TxnItemLine>
                              </TxnItemLines>
               </Transaction>
               <Transaction>
                              <TxnHeader>
                                             <StoreId>7837</StoreId>
                                             <TillNumber>1</TillNumber>
                                             <TxnNumber>164728</TxnNumber>
                                             <StartDate>2019-02-02T08:19:47</StartDate>
                                             <TxnType>1</TxnType>
                              </TxnHeader>
                              <TxnItemLines>
                                             <TxnItemLine>
                                                            <DetailSequence>1</DetailSequence>
                                                            <ItemNumber>1902</ItemNumber>
                                                            <DeptNumber>154</DeptNumber>
                                                            <Quantity>1.000000</Quantity>
                                                            <LineValue>10.000000</LineValue>
                                             </TxnItemLine>
                              </TxnItemLines>
               </Transaction>

원하는

<Transaction>
                              <TxnHeader>
                                             <StoreId>6705</StoreId>
                                             <TillNumber>1</TillNumber>
                                             <TxnNumber>343243</TxnNumber>
                                             <StartDate>2019-02-02T07:42:45</StartDate>
                                             <TxnType>1</TxnType>
                              </TxnHeader>
                              <TxnItemLines>
                                             <TxnItemLine>
                                                            <DetailSequence>1</DetailSequence>
                                                            <ItemNumber>6304</ItemNumber>
                                                            <DeptNumber>168</DeptNumber>
                                                            <Quantity>1.000000</Quantity>
                                                            <LineValue>4.470000</LineValue>
                                             </TxnItemLine>
                              </TxnItemLines>
               </Transaction>
               <Transaction>
                              <TxnHeader>
                                             <StoreId>7837</StoreId>
                                             <TillNumber>1</TillNumber>
                                             <TxnNumber>164728</TxnNumber>
                                             <StartDate>2019-02-02T08:19:47</StartDate>
                                             <TxnType>1</TxnType>
                              </TxnHeader>
                              <TxnItemLines>
                                             <TxnItemLine>
                                                            <DetailSequence>1</DetailSequence>
                                                            <ItemNumber>1902</ItemNumber>
                                                            <DeptNumber>154</DeptNumber>
                                                            <Quantity>1.000000</Quantity>
                                                            <LineValue>10.000000</LineValue>
                                             </TxnItemLine>
                              </TxnItemLines>
               </Transaction>

위의 원하는 텍스트는 8351이 포함된 거래 태그를 완전히 제거했습니다.

쿼리를 사용하여 Regex 찾기 및 바꾸기(아무 것도 사용하지 않음)를 시도했습니다.

<Transaction>.*?<StoreID>8351</StoreID>.*?</Transaction>

그리고 결국 8351이 포함된 첫 번째 트랜잭션의 끝까지 맨 위에서 문서의 거대한 덩어리를 래핑하게 되었습니다.

어떤 도움이라도 대단히 감사하겠습니다!

답변1

  • Ctrl+H
  • 무엇을 찾다:<Transaction>(?:(?!</Transaction>).)+<StoreId>8351</StoreId>(?:(?!<Transaction>).)+</Transaction>\R
  • 다음으로 교체:LEAVE EMPTY
  • 대소문자 일치 확인
  • 둘러보기 확인
  • 정규식 확인
  • 확인하다. matches newline
  • Replace all

설명:

<Transaction>               # opening tag
(?:(?!</Transaction>).)+    # tempered greedy token, make sure we haven't </Transaction> before the following
<StoreId>8351</StoreId>     # literally
(?:(?!<Transaction>).)+     # tempered greedy token, make sure we haven't <Transaction> before the following
</Transaction>              # literally, closing tag
\R?                         # optional any kind of linebreak

화면 캡처:

여기에 이미지 설명을 입력하세요

자세히 알아보기강화된 욕심 토큰

관련 정보