Цель состоит в том, чтобы извлечь документы XML с выражением XPath
из группы текстовых файлов в виде строк.Сложность заключается в том, что формы текстовых файлов могут различаться. Может быть:
- один файл zip / tar с 100 файлами, каждый 1 документ XML
- один файл с 100XML-документы (совокупный документ)
- один файл zip / tar, с разными уровнями каталогов, с отдельными XML-записями в виде файлов и совокупными XML-файлами
Я думал, что нашел решениес библиотекой Spark Spark-XML Databrick , так как она обрабатывает рекурсивное сглаживание при чтении файлов.Это было прекрасно.Может сделать что-то вроде:
# read directory of loose files
df = sqlContext.read.format('com.databricks.spark.xml').options(rowTag='mods:mods').load('file:///tmp/combine/qs/mods/*.xml')
# recursively discover and parse
df = sqlContext.read.format('com.databricks.spark.xml').options(rowTag='mods:mods').load('file:///tmp/combine/qs/**/*.xml')
# even read archive files without additional work
df = sqlContext.read.format('com.databricks.spark.xml').options(rowTag='mods:mods').load('file:///tmp/combine/mods_archive.tar')
Проблема, эта библиотека ориентирована на синтаксический анализ записей XML в столбцы DataFrame, где моя цель - извлечь только XML-документы в виде строк для хранения.
Мой scala не достаточно силен, чтобы легко взломать библиотеку Spark-XML, чтобы использовать рекурсивное копирование и захват документов XPath, но пропуская синтаксический анализ и вместо этого сохраняя всю запись XML в виде строки.
Библиотека поставляетсяс возможностью сериализации DataFrames в XML, но сериализация определенно отличается от ввода (что в некоторой степени следует ожидать).Например, текстовые значения элемента становятся атрибутами элемента.Принимая во внимание следующий исходный XML:
<mods:role>
<mods:roleTerm authority="marcrelator" type="text">creator</mods:roleTerm>
</mods:role>
, читая, а затем сериализуя с возвратами Spark-XML:
<mods:role>
<mods:roleTerm VALUE="creator" authority="marcrelator" type="text"></mods:roleTerm>
</mods:role>
Однако, даже если бы я мог получить сериализацию VALUE
как фактическуюзначение элемента, я до сих пор не достигаю своей конечной цели - иметь эти XML-документы, которые были обнаружены и прочитаны с помощью превосходного разброса Spark-XML и выбора XPath, просто как строки.
Любое понимание будет оценено.