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

  1. Откройте шрифт как XML
  2. Выполните итерацию по каждому глифу, получите значение атрибута и сохраните временный svg (XML), параметризованный этим значением
  3. Обработать этот файл с помощью Inkscape
  4. Прочитайте каждый из этих файлов
  5. Создан новый шрифт-файл с новыми данными
  6. Сохранить шрифт, удалить глиф

Я прочитал много учебных пособий по Powershell XML и пробовал несколько раз, и есть одна вещь, которую я не знаю, что не так, но я получаю каждый глиф из шрифта с этой строкой:

$nodes = Select-Xml -Content $( Get-Content -Path $_.FullName )  -XPath "//glyph" -Namespace $namespaces

требует много времени и доставляет 60 символов, даже если их больше в шрифте. Все остальное в скрипте работает правильно, но если я создам изображение для обработки всех 20 шрифтов (будет больше в будущем), это займет целый день, и не все глифы будут обработаны.

Итак, есть ли ошибка при чтении файла и разборе XML? Почему это так невероятно медленно и почему не все глифы обрабатываются?

1 ответ1

0

Пара вариантов для вас:

  1. Select-Xml -Path test.xml -XPath "//*[local-name()='glyph']")
  2. [xml] $x = gc test.xml ; $x.SelectNodes("//*[local-name()='glyph']")

Оба выбирают 95 узлов очень быстро. Я проверил, что вы положили в корзину для пасты.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .