我有几个(20 个)svg 字体(基于 xml 的字体格式),平均每个字体大约 300kb,包含大约 100 个字形标签。我想用 Inkscape 处理每个字形。因此,我想用 Powershell 脚本进行的 XML 处理部分是:
- 将字体打开为 XML
- 迭代每个字形,获取属性值并保存以此值参数化的临时 svg(XML)
- 使用 Inkscape 处理此文件
- 阅读每个文件
- 使用新数据构建了一个新的字体文件
- 保存字体,删除字形
我已经阅读了很多 Powershell XML 教程并尝试了几次,但有一件事我不知道是什么问题,但我用这一行从字体中获取了每个字形:
$nodes = Select-Xml -Content $( Get-Content -Path $_.FullName ) -XPath "//glyph" -Namespace $namespaces
需要很多时间,并且只能提供 60 个字形,即使字体中还有更多字形。其余脚本都运行正常,但如果我想处理所有 20 个字体(将来会更多),则需要一整天的时间,而且并非所有字形都得到处理。
那么,读取文件和解析 XML 是否失败了?为什么速度如此之慢,为什么没有处理所有字形?
答案1
为您提供以下几种选择:
Select-Xml -Path test.xml -XPath "//*[local-name()='glyph']")
[xml] $x = gc test.xml ; $x.SelectNodes("//*[local-name()='glyph']")
两者都可以快速选择 95 个节点。我测试了您放入粘贴箱的内容。