XSL模板生成XML无序列表时项目符号不显示问题求助
解决XSL生成无序列表但项目符号不显示的问题
别着急,你的XSL模板核心结构是没问题的,咱们一步步排查问题所在:
1. 先确认转换后的HTML输出是否正确
你的XSL代码应该能生成标准的HTML无序列表结构:
<ul> <li>First item</li> <li>Second item</li> </ul>
先检查转换后的实际输出是不是这个样子:
- 如果输出不对,问题出在XSL转换环节;
- 如果输出完全符合上面的结构,那项目符号不显示基本是CSS样式覆盖了默认行为导致的。
2. 排查CSS样式干扰
浏览器默认会给<ul>和<li>显示项目符号,但自定义CSS很容易把它隐藏掉,你可以检查这几点:
- 是否有
list-style-type: none或list-style: none应用在你的<ul>/<li>上; - 是否设置了
padding-left: 0或margin-left: 0,导致项目符号被挤出可视区域。
解决办法是给列表加上明确的样式,强制显示项目符号:
ul { list-style-type: disc; /* 可选值还有circle、square,按需选择 */ padding-left: 2em; /* 给项目符号留出足够的显示空间 */ }
3. 检查XSL的输出配置
如果你的XSL没有指定输出方法为HTML,可能会生成XML格式的HTML(比如自闭合标签、缺少DOCTYPE),部分旧浏览器解析时会出现异常。建议在XSL的根节点下添加输出配置:
<xsl:output method="html" indent="yes"/>
4. 确认列表内容是否正确渲染
你的XSL里用了<xsl:apply-templates select="./para"/>,但如果没有专门处理<para>或<literal>的模板,XSL的默认模板虽然会输出文本,但如果<literal>有特殊命名空间或格式,可能导致内容没显示——空的<li>标签几乎看不到项目符号。
你可以先做个测试,直接输出文本内容:
<xsl:template match="unorderedList"> <ul> <xsl:for-each select="listitem"> <li> <xsl:value-of select="para/literal"/> </li> </xsl:for-each> </ul> </xsl:template>
如果这样能看到项目符号和内容,说明你需要给<para>或<literal>编写专门的模板来正确输出内容。
内容的提问来源于stack exchange,提问作者Cristina Moretti
相关产品推荐
相关产品推荐

