Notepad ++ RegEx XML dosyasını değiştirin


0

Burada çok etrafa baktım, ancak RegEx'leri kullanırken sorunum ve noob için bir çözüm bulamıyorum.

Bir XML dosyasını şuna benzeyen etiketlerle değiştirmeye çalışıyorum:

<key>Date Modified</key><date>2014-09-09T16:18:44Z</date>
<key>Date Added</key><date>2014-09-09T18:06:23Z</date>

Bu gibi görünen etiketlere:

<key>Date Modified</key><date>2014-09-09T16:18:44Z</date>
<key>Date Added</key><date>2014-09-??T18:06:23Z</date>

Temelde Tarih Ekleme alanını 2014-09- ?? eşleşen bir şey için

<key>Date Modified</key><date>2014-09-09T16:18:44Z</date>

Ancak "T16: ​​18: 44z" zamanı her zaman farklıdır. Sadece tarih aynı. (Yani)

<key>Date Modified</key><date>2014-09-09..........</date>

Yanıtlar:


0

Düzenli ifadeler iş için yanlış bir araçtır. Konuyla ilgili bu ünlü diatribe bakınız: https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454

İş için doğru araç, XML dönüşüm dili XSLT'dir. XSLT 2.0, tek tek düğümlerin içeriğini değiştirmek için normal ifadeler kullanabilir, ancak işaretlemeyi anlamak için uygun bir XML ayrıştırıcı kullanır. İşte bu görev için XSLT'nize ekleyebileceğiniz bir dönüşüm kuralı:

<xsl:template match="date
                        [preceding-sibling::key[1]='Date Added']
                        [preceding-sibling::key[2]='Date Modified']
                        [starts-with(preceding-sibling::date[1],'2014-09-09')]">
  <date>
    <xsl:value-of select="concat(substring(.,1, 8), '??', substring(, 11))"/>
  </date>
</xsl:template> 

(Eşleşme deseninin bu kadar karmaşık olmasının nedeni, XML'in çok kötü bir şekilde yapılandırılmış olmasıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.