Самый быстрый XML, обрабатывающий в Delphi для очень больших документов

Используйте default_flow_style=False

Например:

import yaml                                                                     

job_template = [                                                                
  {                                                                             
    "job-template": {                                                           
      "name": "{name}_job",                                                     
      "description": "job description",                                         
      "project-type": "multibranch",                                            
      "number-to-keep": 30,                                                     
      "days-to-keep": 30,                                                       
      "scm": [                                                                  
        {                                                                       
          "git": {                                                              
            "url": "{git_url}"                                                  
          }                                                                     
        }                                                                       
      ]                                                                         
    }                                                                           
  }                                                                             
]                                                                               

yaml.dump(job_template, open("job_template.yaml", "w"), default_flow_style=False)  
8
задан Jon Seigel 19 March 2010 в 19:01
поделиться

8 ответов

Если я понял Ваш вопрос правильно, Вы знали структуру данных, и Вы изменяете данные - не структура XML файла.

Под ними обусловливают и если производительность крайне важна, то Вы могли попробовать управлением простым текстом - пропускают парсинг XML.

Читайте из потока, используйте некоторый быстрый текстовый алгоритм поиска, например, Boyer-Moore, для нахождения мест, где необходимо изменить данные, сделайте модификацию и выходные данные в другой поток.

Это было бы одной передачей, никаким парсингом XML, никаким зданием дерева XML в оперативной памяти.

8
ответ дан 5 December 2019 в 07:13
поделиться

SAX достоин рассмотрения вместо синтаксического анализатора DOM.

С DOM Вы платите издержки загрузки документа, но когда-то к загруженным данным можно получить доступ и обновить быстро.

С SAX необходимо записать обработчики для начинать-элемента, элемента конца, и т.д., но у Вас есть намного больше гибкости в том, что Вы делаете, как Вы продвигаетесь.

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

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

Если это имеет значение я склонен использовать синтаксические анализаторы SAX и MSXML DOM. Можно утверждать, что они не лучшее выполнение, я утверждаю, что существует, вероятно, больше людей, работающих над улучшением их, таким образом, они поправятся и лучше.

5
ответ дан 5 December 2019 в 07:13
поделиться

Вы могли бы хотеть взглянуть на компонент DIHtmlParser от Вдохновения Delphi. Это, как предполагается, "чрезвычайно быстро, особенно при парсинге огромных файлов", и "на современных машинах счет подходит больше чем к 15 МБ данных HTML в секунду". У меня был некоторый довольно хороший опыт с ним, хотя я никогда не пробовал его огромными файлами.

3
ответ дан 5 December 2019 в 07:13
поделиться

Я не специалист, но я полагаю, что согласие состоит в том, что синтаксический анализатор SAX будет намного более эффективным, чем DOM...

2
ответ дан 5 December 2019 в 07:13
поделиться

Я очень удовлетворен NativeXML от SimDesign. Это также включает специальную версию под названием FastXML, который я еще не протестировал, но сказан быть, ну, в общем, быстрым.

4
ответ дан 5 December 2019 в 07:13
поделиться

Другая возможность, которую я просто обнаружил, с пакетом LMD ElPack, который я купил, они включают библиотеку поддержки XML, которую они говорят, "является чрезвычайно быстрым, полностью unicode-поддерживающим и добавляет только маленькое место к Вашим EXE-файлам".

Рассмотрение источника их единицы LMDXML.pas включало в пакет LMD 7 (для Delphi 2009), это говорит, что код основан на Выпуске 8.0 SimpleXML (июль 2006) код Michail Vlasov.

0
ответ дан 5 December 2019 в 07:13
поделиться

Если Вы когда-нибудь считаете управляемый событиями SAX путем, библиотека XML Parser могла бы приехать довольно удобная.

1
ответ дан 5 December 2019 в 07:13
поделиться

Если вам нужны только прямые манипуляции, я бы согласился с ответом zendar.

Что касается реализации DOM или SAX, я бы порекомендовал DIXml .

0
ответ дан 5 December 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: