Notepad++ XML: eliminar etiquetas condicionalmente según el contenido de la etiqueta secundaria

Notepad++ XML: eliminar etiquetas condicionalmente según el contenido de la etiqueta secundaria

Soy bastante nuevo en Notepad++ y trato de usar Regex para buscar valores específicos en un campo y eliminar su etiqueta principal (y todo el contenido, incluido el campo).

Básicamente, estoy intentando eliminar transacciones que tienen ciertos ID de tienda. Los archivos son enormes y hay miles de entradas de las que necesito deshacerme, ¡muestra a continuación!

Muestra

<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>

Deseado

<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>

El texto deseado arriba ha eliminado por completo la etiqueta de transacción que contiene 8351

Intenté buscar y reemplazar Regex (sin nada) usando la consulta:

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

y terminó envolviendo una gran parte del documento desde la parte superior hasta el final de la primera transacción que contiene 8351

¡Cualquier ayuda sería muy apreciada!

Respuesta1

  • Ctrl+H
  • Encontrar que:<Transaction>(?:(?!</Transaction>).)+<StoreId>8351</StoreId>(?:(?!<Transaction>).)+</Transaction>\R
  • Reemplazar con:LEAVE EMPTY
  • comprobar caso de coincidencia
  • comprobar Envolver alrededor
  • comprobar expresión regular
  • CONTROLAR. matches newline
  • Replace all

Explicación:

<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

La captura de pantalla:

ingrese la descripción de la imagen aquí

Más sobreFicha codiciosa templada

información relacionada