Squeak.ru - шаблоны программирования

UltraEdit/Блокнот - Удаление узлов XML с пустыми свойствами

В настоящее время я сталкиваюсь с проблемой с программным обеспечением, с которым я работаю, это программное обеспечение получает от внешнего программного обеспечения несколько Xml-файлов, которые нам нужно обработать, теперь наша проблема заключается в том, что эти Xml-файлы содержат множество узлов, которые совершенно бесполезны и также сделать файлы (xmls) очень тяжелыми из-за этого, в результате программа работает очень медленно для обработки каждого из xmls, это должно быть изменено в будущем, и я хотел бы доказать, что, удалив эти узлы, мы улучшим наше время обработки много, теперь я хотел бы в качестве первого шага сделать это вручную, используя образец xml и применяя синтаксис регулярного выражения для удаления всех узлов с пустым свойством значения, это синтаксис, который я использую сейчас и через функция замены в блокноте, я могу удалить эти строки, а затем удалить пустые строки:

<.*(\s\w+?[^=]*?="[^"]*?")*?\s+?value="[""]*?".*?>

Пример

<TEST_NODE value="1"/>
<TEST_NODE value=""/>
<TEST_NODE value="0"/>

В моем случае узлы могут называться по-разному и могут иметь разные свойства, но мне следует заботиться о тех, которые содержат что-то в свойстве значения, поэтому в этом случае я должен удалить вторую строку

Похоже, это работает нормально, однако с очень большими файлами (10 МБ) функция замены блокнота ++, похоже, имеет проблемы, и она перестает работать должным образом, ломая множество тегов...

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

Сложность сопоставления выражения превысила доступные ресурсы.

Может ли кто-нибудь помочь мне с этим? к сожалению, я даже не так хорошо разбираюсь в Regex, и я не уверен, хорош ли приведенный выше код или плох.


  • в результате наша программа работает очень медленно, чтобы обработать каждый из XML-файлов - это признак того, что программа работает плохо. Размер и количество пустых элементов/атрибутов в XML на самом деле не связаны со скоростью, с которой он может быть обработан (к тому же, 10 МБ - это небольшой файл XML). Таким образом, вместо того, чтобы пытаться очистить XML, вашей первой областью, которую нужно попытаться оптимизировать, должен быть код этой программы. Что он делает в настоящее время? 08.10.2018
  • Вы совершенно правы, но это действительно старое программное обеспечение, у меня нет доступа к исходному коду, так как моя компания считает, что оно отлично работает и никаких дальнейших разработок не требуется, мы создаем документы автоматически в соответствии с полученными XML-файлами (несколько свойства тонны узлов) и мы делаем несколько вещей, таких как выбор переводов из баз данных в соответствии с xmls, поэтому в конечном итоге мы получаем эти задержки, к сожалению, любые жалобы там бесполезны, поскольку они действительно не заботятся об этом, так как я просто хотел поднять этот вопрос, сказав, что вы знаете, что это может сэкономить нам до 50% времени. 08.10.2018
  • Тогда я бы предложил использовать хотя бы подходящий инструмент для обрезки XML. Notepad++ и регулярное выражение не являются подходящими инструментами (в настоящее время вы понимаете, почему). Используйте инструмент с поддержкой XML, созданный специально для этой работы. XSLT идеально подходит здесь — и вы, в отличие от всего, что может сделать Notepad++, можете полностью автоматизировать этот шаг. 08.10.2018

Ответы:


1

Попробуйте это регулярное выражение в Notepad++

<[^<]+value=""[^>]*>
08.10.2018
  • Я нашел 5 ошибок в этом ответе, подробности см. В моем ответе. 08.10.2018

  • 2

    Попробуй это:

    <(?=[^><]*?value\s*=\s*"")[^><]*>
    

    Заменить ничем.

    Это может быть случай катастрофического возврата, когда регулярное выражение выполняется из-за слишком большого количества квантификаторов, примененных к слишком большому количеству широких классов символов, таких как .

    Квантификаторы в этом ответе применяются только к классу не < или >, что должно остановить откат выражения через теги XML.

    08.10.2018

    3

    Вы используете неправильный инструмент для работы. Если вы собираетесь манипулировать XML, вам нужно добавить XSLT и/или XQuery в свой набор инструментов. Использование регулярных выражений для задания является медленным и подвержено ошибкам.

    Например, вот лишь несколько ошибок в ответе, который вы приняли:

    • Элементы, в которых используются одинарные кавычки (value=''), не будут сопоставляться.
    • Элемент с пробелом вокруг знака равенства не будет сопоставлен
    • Элементы с атрибутом, имя которого заканчивается на value (например, xvalue=""), будут сопоставлены
    • value="" будет сопоставляться внутри комментариев и узлов CDATA
    • value="" может сопоставляться внутри текстовых узлов: <x>value=""</x>
    • Элементы, разделенные на несколько строк, не будут сопоставляться (я подозреваю)

    В XSLT 3.0 это просто

    <xsl:transform version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:mode on-no-match="shallow-copy"/>
     <xsl:template match="*[@value='']"/>
    </xsl:transform>
    
    08.10.2018
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...