Преобразование Powershell XML очень медленно
У меня есть пара (20) svg-шрифтов (формат шрифта на основе xml), в среднем каждый из них занимает около 300 КБ и содержит около 100 Glyph-тегов. Я хотел бы обработать каждый глиф с Inkscape. Итак, часть XML-обработки, которую я хотел бы сделать со скриптом Powershell:
- Откройте шрифт как 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 узлов очень быстро. Я проверил, что вы положили в корзину.