使用 XML 在 InDesign 中创建项目符号列表

Creating a bulleted list in InDesign with XML

我已经尝试了几个小时才能在 InDesign 中使用项目符号列表,其中每个项目都在自己的行中,而无需在导入后调整格式。

这是我必须使用的 XML 结构的示例:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
    <list>
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </list>
</Root>

我为项目符号设置了段落样式,并在 <item> 标签上使用它,但在导入后它们显示为内联:

如何在导入后不手动输入 returns 的情况下让每个项目出现在新行中?这将成为包含数千行 XML 的更大文档的一部分,我想自动化该过程。

在 XML 中,节点之间的新行将被忽略。来自数据库的大多数 XML 导出在节点之间没有新行。

InDesign 确实关心新行,因此当您将 XML 放入文本框架时,所有三个项目节点都呈现为单个段落。

项目符号列表是段落样式的设置,您需要在列表节点中的每个项目节点之前插入换行符

您可以调整 XML 或将 CR 添加到 XSLT。我通常添加

&#13;

在我的项目符号列表项之后的 XSLT 中。

这是我的 XSLT 解决方案:

<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:template match="item[position() != 1 and not(descendant::value[not(*)][normalize-space()])]">
        <xsl:copy ><xsl:text>&#xa;</xsl:text><xsl:apply-templates /></xsl:copy>
    </xsl:template>
    <xsl:template match="@*|node()">
        <xsl:copy select=".">
            <xsl:copy-of select="@*" />
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>