#xml #xml-parsing #jaxb
#xml #xml-синтаксический анализ #jaxb
Вопрос:
У меня есть вариант использования, в котором я хочу проанализировать XML-файл следующего вида и создать из него HTML-отчет.
<?xml version = '1.0'?>
<outer tag>
<first_tag>
<some Random xml tag>
<another tag>
</another tag>
</some Random xml tag>
</first_tag>
<first_tag>
<some Random xml tag>
<another tag>
</another tag>
</some Random xml tag>
</first_tag>
<second_tag>
<some Random xml tag>
<another tag>
</another tag>
</some Random xml tag>
</second_tag>
Проблема с этой структурой XML заключается в том, что я знаю только, что весь XML будет заключен во внешний тег, а теги второго уровня могут быть только first_tag или second_Tag. Я не имею ни малейшего представления о том, что будет внутри этих тегов второго уровня.
Мой html должен выглядеть так:
Elements inside outer_tag
First_tag children
" <some Random xml tag>
<another tag>
</another tag>
</some Random xml tag> " // XML structure itself
First_tag children :
" <some Random xml tag>
<another tag>
</another tag>
</some Random xml tag> " // XML structure itself
Second_Tag children :
" <some Random xml tag>
<another tag>
</another tag>
</some Random xml tag> " // XML structure itself
Я пробовал jaxb и другие анализаторы XML. Поскольку я понятия не имею о внутренней структуре, мне трудно написать алгоритм. Может ли кто-нибудь помочь мне с этим?
Ответ №1:
Преобразование XSL будет отлично работать в этом сценарии. XSLT обычно используется для преобразования XML в другие форматы, такие как HTML. Вот преобразование, которое даст вам то, что вы хотите:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="first_tag|second_tag">
<xsl:copy-of select="./*"/>
</xsl:template>
</xsl:transform>
Посмотрите, как это работает здесь: http://xsltransform.net/jyH9rLS