我正在将一些我无法控制的XML转换为XHTML。 XML模式为段落定义<para>
标记,为列表定义<unordered-list>
和<ordered-list>
。
我经常在这个XML中找到嵌套在段落中的列表。因此,直接转换会导致<ul>
嵌套在<p>
中,这在XHTML中是非法的。
我已经创建了一个处理它的方法列表,这里最明显的是:
<para>
标签在无序列表开始之前关闭,然后重新打开。 (我最喜欢这个选项,但是由于嵌套的级别很复杂,我们可能没有预算)<para>
转换为<div>
并设置div上的边距,使其看起来像浏览器中的段落。这是发布有效XHTML的最简单的解决方案,但它取自标记的语义值。我的问题是:
我怎样才能找到这个?
答案 0 :(得分:2)
我也反对这一点。
就个人而言,我认为标准的一部分是p
不能包含列表的严重错误。我认为它在印刷上是合法的,因此它应该是合法的,原本打算成为文本的标记。
我可能因此而受到抨击,但XHTML在现实世界中已经崩溃并被烧毁,无论这是不是一个好主意。如果仅仅因为糟糕的标记和宽松的浏览器将继续永远地相互延续,那么今天HTML标记的常常可怕的标签汤将继续存在很长时间。
因此,我倾向于使用选项1。
在我看来,选项3也是可行的。虽然我没有证据,但我很确定没有任何搜索引擎疯狂到足以让我们对我们应用于HTML的大多数格式化标签产生任何信任。当然,meta
和a
标签是明显的例外。
答案 1 :(得分:1)
首先,除非您现在设置每个可用的CSS属性以及将来可能提供的每个CSS属性,否则您无法保证<div>
将匹配WRT样式与<p>
。 (虽然我同意你可以接近,这可能已经足够了,但请继续阅读。)我不知道任何视觉浏览器或其他工具会以不同方式认真对待它们,但这同样是一件神器,恕我直言,目前在网络上普遍存在宽松的解释,因为它们的意义非常接近。
对于源数据中的每个<ul>
,<unordered-list>
是否正确转换?如果它们总是显示为块级内容而不是1)a,2)内联,3)列表;那是一个安全的赌注。如果是这样,您可以将段落分成两部分(如果您愿意,可以将整个内容包装在<div>
中。)
示例输入:
<para>Yadda yadda: <unordered-list/> And so fin.</para>
输出:
<div>
<p>Yadda yadda:</p>
<ul/>
<p>And so fin.</p>
</div>
答案 2 :(得分:0)
好消息是这3个选项中的任何一个都可行。
有很多很多人会告诉你“如果它有效,就会忘记语义并做到这一点。”因此,选项1 可能会成为网站的最爱,如果有人问这里。
选项2 是我最喜欢的,并且在语义上是最好的。如果时间/预算允许,我会明确地做。
然而,选项3 紧随其后,希望这将回答您的问题:<div>
元素和<p>
元素几乎相同。实际上,最大的区别是语义。在大多数浏览器的CSS规范中,它们每个都只应用了一条规则:display: block
。