xslt выравнивает дочерние элементы в элементе DocBook para
Я преобразовываю некоторые сгенерированные DocBook XML (из Doxygen) в мои компании XML, который действительно является подмножеством DocBook. Элемент para похож на следующий:
<para>some text.....
<literallayout>
</literallayout>
more text....
<table>
...
</table>
even more text
<table>...</table>
<literallayout>text also look here</literlayout>
more text <link xlink:href="http://someurl.com">
</para>
Поскольку наше подмножество docbook НЕ любит блочные элементы внутри para, такие как таблица или рисунок, я хотел бы проанализировать этот элемент и поместить новые элементы para вокруг этих фрагментов текста, чтобы у меня было что-то вроде этого:
<para>some text.....
</para>
<literallayout>
</literallayout>
<para>
more text....
</para>
<table>
...
</table>
<para>
even more text
</para>
<table>...</table>
<literallayout>text also look here </literlayout>
<para> more text</para>
<para> <link xlink:href="http://someurl.com"></para>
Раньше, думая, что я никогда не увижу ничего такого сложного, я ставил таблицы вне элемента para, как это:
<xsl:when test="( child::figure | child::table ) and (./text())">
<Para>
<xsl:value-of select="./text()"/>
</Para>
<xsl:apply-templates select="*"/>
</xsl:when>
Но это закончилось только перехватом первого текстового узла и запутыванием других вещей.
Может кто-нибудь предложить, мы надеемся, элегантный способ справиться с этим, если пара элементов это грязный
Спасибо,
Russ
Обновление: я забыл представить угловой случай. Я редактировал исходный код выше, проверьте элемент ссылки. Текущее решение удаляет содержащий элемент para из источника.