parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Преобразование из XML в базу данных

egr 31.01.2003 10:55

Как лучше вытаскивать данные из XML файла в БД? Требуется вытаскивать данные из различных элементов документа и вставлять их в разные поля. Все узлы, кроме одного не могут иметь вложенных элементов, а тот который имеет вложенные элементы, точнее его PCDATA и все дерево элементов, должны быть засунуты без изменений в поле типа text.

С элементами с текстовым содержанием все просто, вытягиваем из них данные с помощью DOM методов selectString:
$xml_src[^xdoc::create{...}]
^xml_src.selectString[string(pcdataElement)]
но вот с элементным содержанием сложнее, - я не нашел как его передавать с помощью DOM в неизменном виде, поэтому я решил его передавать с помощью XSLT преобразования применяя специальную таблицу, которая находит требуемый элемент и просто с помощью директив copy-of передает его содержание без изменения:
$styleSheet[^xdoc::load[path_to_special_xsl_stylesheet]]

$transformedDoc[^xml_src.transform[$styleSheet]]

$document[^transformedDoc.string[$.method[xml]]]
Таблица выглядит например так:
...
<xsl:template match="treeElement">
	<xsl:copy-of select="*"/>
</xsl:template>

<xsl:template match="pcdataElement"/>
...
Вроде все работает, но мне это кажется очень некрасиво сделанным.