Notepad ++ RegExはXMLファイルを置き換えます


0

私はここをよく見てきましたが、RegExを使用するとき、私の問題の解決策とnoobを見つけることができません。

次のようなタグを持つXMLファイルを変更しようとしています。

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

このように見えるタグへ:

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

基本的に、追加日フィールドを2014-09-?に変更しますか?一致するもの

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

ただし、「T16:18:44z」の時間は常に異なります。日付のみが同じです。

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

回答:


0

正規表現は、仕事にとって間違ったツールです。件名にこの有名なdiatribeを参照してください:https//stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454

このジョブに適したツールは、XML変換言語XSLTです。XSLT 2.0は正規表現を使用して個々のノードのコンテンツを操作できますが、適切なXMLパーサーを使用してマークアップを理解します。このタスクのXSLTに含めることができる変換ルールは次のとおりです。

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

(一致パターンが非常に複雑な理由は、XMLの構造が非常に悪いためです。キーと日付を接続するラッパー要素はなく、2つのキー要素を接続するラッパー要素はありません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.