Notepad++ RegEx 替换 XML 文件

Notepad++ RegEx 替换 XML 文件

我在这里查找了很多资料,但找不到解决我的问题的方法,并且在使用 RegEx 时遇到问题。

我正在尝试使用如下标签来更改 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>

答案1

正则表达式不是完成这项工作的最佳工具。请参阅关于该主题的著名长篇大论: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 结构太差。没有连接键和日期的包装元素,也没有连接两个键元素的包装元素)。

相关内容