仅在XML文件的CDATA部分中进行搜索和替换

时间:2014-09-15 10:22:29

标签: xml regex wordpress notepad++ cdata

我不确定这是否可以使用REGEX表达式(例如,对于Notepad ++),或者我是否需要一个完整的脚本来执行此操作。我想在XML文件的CDATA部分中找到换行符,用虚拟注释或其他中性标记替换它们。这是为了在后续过滤过程中保护它们。

应忽略XML文件中的所有其他换行符(不在CDATA部分中的那些换行符)。

背景更详细:

我有一个XML文件,它是从德语Wordpress网站导出的几个页面。我想将此文件导入我的翻译记忆库系统(来自Kilgray的memoQ),以翻译内容,然后重新导出以便网站管理员重新导入到Wordpress网站。

翻译记忆库软件应用级联过滤器来过滤掉代码并仅选择可翻译的内容,并将其呈现给我进行翻译。我翻译它们,然后将这些视频重新插入代码中并且瞧 - 我有相同的文件但是有英文内容而不是德语。

memoQ中的级联过滤器是一个XML过滤器,后跟一个HTML过滤器。

这会成功处理所有事情,但遗憾的是不会保留换行符。我试过调整过滤器没有成功。 Wordpress将网站文本部分的换行符导出为简单的换行符,而不是HTML标记。所以这些需要保留,但在上述级联过滤器的某处,它们不被识别。

这导致我在导入翻译记忆库软件之前尝试保护它们 - 我最初认为它们都是双重换行符,所以搜索了双重换行符并用虚拟评论替换每个换行符<!--MORK_NEWLINE--> 这一直保留在最后,最后我可以搜索它并用换行符替换。

但是,有些文字没有双重换行符,只有一个换行符。并且XML文件中还有其他单个换行符与此无关,因此我不想触及它们。因此,我试图找出如何仅替换CDATA部分中的那些。

XML文件中的相关代码如下所示:

<item>
            <title>Interview title</title>
    <link>http://www.example.com/ueber-uns/interview/</link>
    <pubDate>Wed, xx Feb example 06:xx:xx +0000</pubDate>
    <dc:creator><![CDATA[mrsmith]]></dc:creator>
    <guid isPermaLink="false">http://exampleTEST.example.com/?page_id=677</guid>
    <description></description>
    <content:encoded><![CDATA[<h3>Interview title</h3>
<em>Interview subtitle</em>

<strong>Question text1?</strong>

Answer text1.

<strong>Question text2?</strong>

Answer text2.

<strong>Question text3?</strong>

Answer text3.]]></content:encoded>

</item>

这些部分并不总是有三个问题,还有其他部分,例如:地址

line 1
line 2
line 3

我希望有足够的信息可以继续,

感谢您的帮助

克雷格

PS这是我在这里的第一个问题,我已经尝试搜索,找不到任何可以直接回复的问题,抱歉,如果我忽视了任何事情。

PPS如果答案涉及类似python(相关帖子引用)的内容,我不得不承认我不知道如何运行脚本:-(所以也需要一个提示!

PPS如果答案涉及严肃的脚本,我很乐意通过自由网站委托某人来做。去哪儿了?

1 个答案:

答案 0 :(得分:0)

设置find + replace窗口(ctrl + h),如下所示:

  • 环绕(已检查)
  • 正则表达式(选中)
  • 。匹配换行(已选中)
  • 其他所有(未选中)
  • 找到:(<!\[CDATA\[[^]]*?(][^]]+)*?)\r?\n
  • 替换为:\1<!--MORK_NEWLINE-->

现在点击全部替换,直到结果为“0被替换。”

请注意,每次单击“全部替换”将替换每个CDATA部分中的一个换行符,因此您必须单击它与单个CDATA部分中最大数量的换行符相同的次数。另请注意,如果您的文件是Windows(CR + LF)文件,这会使用通用换行符,这可能会导致您之前遇到问题。