所以我有一个包含大量链接的 XML。我想要删除所有非 URL 的内容。例如,目前它看起来像这样:
<update extract="1">
<kb>KB2276594</kb>
<date>2011/01/18</date>
<size>348 KB</size>
<category>Hotfix</category>
<name>Windows6.1-KB2276594-x64.msu</name>
<description>"Error – Sent to Printer" error when you try to send a large print job to a Web Services for Devices-based printer in Windows Server 2008 R2 or in Windows 7</description>
<url>http://hotfixv4.microsoft.com/Windows%207/Windows%20Server2008%20R2%20SP1/sp2/Fix354908/7600/free/427003_intl_x64_zip.exe</url>
</update>
我想要的结果是一个干净的 XML 文件,其中 URL 排成一行(保留它们的顺序并不重要)。像这样:
http://hotfixv4.microsoft.com/Windows%207/Windows%20Server2008%20R2%20SP1/sp2/Fix354908/7600/free/427003_intl_x64_zip.exe
http://hotfixv4.microsoft.com/.Net%20Framework%202.0%20–%20Win7%20SP1,%20Windows%20Server%202008%20R2%20SP1%20(CBS)/sp2/DevDiv947612/50727.5661/free/430877_intl_x64_zip.exe
然后一次性将生成的 URL 复制到剪贴板。这是在 Windows 7 x64 上。命令提示符、Powershell v3 和 Notepad++ 正则表达式方法都可以接受。提前致谢。
答案1
您可以使用 Notepad++ 的 XML Tools 插件。Notepad++ 将从插件 -> 插件管理器下的下载管理器下载并安装它。
它可以评估 XPath 并生成一个列表,您可以将其复制/粘贴到 Excel/Open Office 中,其中所有 URL 都在一列中。
我以您的 XML 代码段为例,使用不同的 URL 创建了多个条目,并将它们全部放在“测试”元素中。单击其中一个 URL 节点,然后使用插件 -> XML 工具 -> 当前 XML 路径(这会复制表达式),然后使用插件 -> XML 工具 -> 评估 XPath 表达式,粘贴表达式,单击评估,然后数据就可以复制到 excel 中了。
答案2
正则表达式不适合解析 XML。
Powershell 可以使用如下方式解析 XML:
[xml]$xml = Get-Content {your_xml_file.xml}
$xml.xpath.to.update | Select-Object -Property url
由于您没有发布完整的 XML,因此很难说出 xpath.to.update 是什么,但这是一般的想法。