Intereting Posts
Как перебирать сразу два массива? Хранить конфиденциальную информацию в базе данных keepass с c # Почему методы C # расширения должны быть определены в статических classах? Как удалить временную часть даты на C # только в объекте DateTime Полная вставка / обновление / удаление дочерних объектов в инфраструктуре Entity Метод управления доступом к веб-api из другого метода controllerа конвертировать .NET общий список в список F # добавление значений enums в простое поле со списком Где хранить файлы данных программ Windows? Ошибка конфигурации AzureWebJobsDashboard C # WinForms – пользовательская кнопка нежелательной границы, когда форма не выбрана Заменить объект в списке объектов Создание обновляемой установки с помощью Install Shield, который поставляется с VS2012 C #: переопределить свойство родительского classа Как проверить, оценил ли пользователь мое приложение

Является ли xslt хорошим подходом для преобразования текста в структуру xml?

Я пытаюсь найти лучшее решение для преобразования простого текста (но с предопределенной длиной для каждого поля) в xml. Например, входной текст может быть «Testuser new york 10018», первые 11 символов указывают имя пользователя, следующие 12 символов указывают город и следующие 5 символов указывают почтовый индекс. Поэтому мне нужно сформировать xml из вышеуказанной строки с предопределенными длинами полей.

Я думаю, 2 подхода

  1. Определите бизнес-объект и заполните свойства объекта, используя функции подстроки во входном тексте, а затем сериализуйте объект в xml

  2. Предопределите структуру xml, используйте xslt, чтобы перейти к каждому узлу и заполнить значения, используя функции подстроки во входном тексте.

Утверждения, которые: (XSLT) "isn't suitable for transforming from structured text to XML. " и утверждение "XSLT must have XML as the input document" **, оба ошибочны .

Я думаю, 2 подхода

  1. Определите бизнес-объект и заполните свойства объекта, используя функции подстроки во входном тексте, а затем сериализуйте объект в xml

  2. Предопределите структуру xml, используйте xslt, чтобы перейти к каждому узлу и заполнить значения, используя функции подстроки во входном тексте.

Фактически, подход 2 довольно легко выполнить с помощью XSLT :

I. XSLT 1.0 :

                        

когда это преобразование применяется к специально форматированному тексту (завернутый в один верхний элемент, который должен быть выполнен правильно), как мы увидим в XSLT 2.0, такая упаковка не нужна):

 Testuser new_york 10018 usera seattle 98000 userb bellevue 98004 userb redmond 98052  

получается желаемый результат :

  Testuser new york 10018   usera seattle 98000   userb bellevue 98004   userb redmond 98052  

Примечания :

  1. Это просто демоверсия, демонстрирующая, как выполнить задачу. Вот почему я не обрабатываю поля фиксированной ширины (хотя это было бы еще проще), но значения, разделенные пробелами.

  2. Любое пространство, содержащееся в любом значении, вводится во ввод как символ подчеркивания (или любой символ нашего выбора, который, как мы знаем, никогда не будет частью какого-либо значения). На выходе любое подчеркивание преобразуется в реальное пространство.

II. Решение XSLT 2.0 :

                      

когда это преобразование применяется к любому XML-документу (не используется и фактически не нужно, как в XSLT 2.0, нет необходимости иметь исходный XML-документ), и если файл C:\temp\delete\delete.txt :

 Testuser new_york 10018 usera seattle 98000 userb bellevue 98004 userb redmond 98052 

снова получается желаемый, правильный результат :

  Testuser new york 10018   usera seattle 98000   userb bellevue 98004   userb redmond 98052  

Примечания :

  1. Использование стандартной функции XSLT 2.0 unparsed-text() .

  2. Использование стандартной функции XPath 2.0 tokenize() .

Конечная нота :

Наиболее сложная обработка текста была произведена промышленным способом полностью в XSLT. Библиотека FXSL содержит общий анализатор LR (1) и измененный YACC, который создает таблицы в формате XML, которые являются входными данными этого общего парсера LR (1).

С помощью этого инструмента я успешно создал парсеры для таких сложных языков, как JSON и XPath 2.0.

XSLT 2.0 отлично подходит для преобразования структурированного текста в XML. Вам может понравиться статья 2010 года Стефани Хаупт и Майк Штуенберг:

http://www.balisage.net/Proceedings/vol5/html/Haupt01/BalisageVol5-Haupt01.html

или моя собственная бумага 2008 года

http://www.saxonica.com/papers/ideadb-1.1/mhk-paper.xml

для тематических исследований.

Обычно я не пытался выполнить задачу с помощью XSLT 1.0, хотя, как показывает ответ Димитрия, это можно сделать в простых случаях.