Sitemap.xml 中的 RegEx:如果后代节点文件类型不是 html,如何删除节点?

RegEx in Sitemap.xml: How do I delete node if descendant node file type is not html?

我有一个由帮助创作工具生成的站点地图。它列出了帮助系统中的每个文件。我只想要 html/htm 个文件。结构如下所示:

<url>
    <loc>https://help.website.com/welcome.htm</loc>
</url>
<url>
    <loc>https://help.website.com/Images/prettyButterfly.png</loc>
</url>
<url>
    <loc>https://help.website.com/Resources/Stylesheets/master.css</loc>
</url>
<url>
    <loc>https://help.website.com/Resources/Scripts/init.js</loc>
</url>
<url>
    <loc>https://help.website.com/gettingStarted/firstSteps.html</loc>
</url>

我可以使用什么正则表达式去除不包含后代 html 或 htm 节点的节点(从 <url></url>)?我打算使用 Notepad++ 进行搜索。

我不是一个很好的正则表达式专家,我尝试过各种方法都无济于事,我真的需要一些专家的帮助。非常感谢!

您可以使用以下表达式:

(<url>\s*<loc>[^<]*\.html?<\/loc>\s*<\/url>)|<url>\s*<loc>[^<]*<\/loc>\s*<\/url>\n?

并用第一个捕获组替换每个匹配项,</code>。</p> <p><strong>解释:</strong></p> <ul> <li><code>(<url>\s*<loc>[^<]*\.html?<\/loc>\s*<\/url>) - 捕获组以匹配具有单个 <loc> 节点以 .html.htm 结尾的 <url> 节点

  • | - 交替.. 或:
  • <url>\s*<loc>[^<]*<\/loc>\s*<\/url> - 匹配其他 <url> 个节点
  • 换句话说,这匹配包含单个 <loc> 节点的每个 <url> 节点,并用第一个捕获组替换每个节点。由于仅捕获具有 HTML/HTM 扩展名的节点,因此删除了其他节点。