【发布时间】:2013-12-06 14:43:09
【问题描述】:
你们中的许多人在上一个问题上帮助我:xslt flattening out child elements in a DocBook para element
这个问题还有一个额外的转折点,我想看看以前是否有人这样做过。回顾之前的示例文本。上一个问题的答案是解决在块元素之间获取文本并用 para 元素包装它们的问题,因为我们的架构不喜欢 para 元素中的块元素,如 tabe、figure 等。
<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>
其中的问题在于,对于像链接这样的内联元素,这些元素需要位于 para 元素中。所以最后两行文字 about 理想情况下应该是这样的:
<para>more text <link xlink:hred="http://someurl.com">someurl</link></para>
使用 for-each 构造,我可以遍历 para 元素中的节点,但如果任何节点是非块元素,我将不得不将它们包装在 para 元素中。如果在这个非块元素之前和/或之后有一个文本节点,那么最好将所有这些都包装在一个 para 元素中。
我可以想到如何使用任何其他编程语言来做到这一点,尽管是以一种 hacky 的方式,但需要 XSLT 专家的帮助来启发我以一种优雅的方式来做到这一点!
有人要求提供更多信息。在上面的示例中,我需要能够输出以下内容:
<para>some text..... </para>
<literallayout>
</literallayout>
<para> more text.... </para>
<table> ... </table>
<para> even more text </para>
<table>...</table>
<literallayout>
<para>more text <link xlink:hred="http://someurl.com">someurl</link></para>
希望这能让事情更清楚。
感谢大家的帮助。
罗斯
【问题讨论】:
-
你能澄清一下吗?在您的示例中,
link元素已经在para元素中,即启动示例文档的元素。 -
当然,让我稍微更新一下示例。