我需要将一些事件XML导入InDesign。我正在使用XSLT对事件列表进行重新排序和排序。为了引入<eventContent>
,我使用的是“ copy-of”,以便保留斜体和粗体标签。但是,InDesign只是将<eventContent>
作为大块文本导入,而忽略段落返回。当我使用“ value-of”时,它将保留段落的返回值,但会拉出斜体和粗体标签。
<eventlist>
<event>
<eventTime>12:00AM</eventTime>
<eventTitle>Movie Night</eventTitle>
<eventContent>
<p>Come to the movie night at the new <strong>Middle School</strong></p>
<p>We will be showing the movie <em>Sing</em></p>
</eventContent>
</event>
<event>
<eventTime>05:00AM</eventTime>
<eventTitle>Dance Party</eventTitle>
<eventContent>
<p>Dance at the park!</p>
<p>Be sure to <strong>bring your own booze</strong>!</p>
</eventContent>
</event>
</eventlist>
是否有一段代码可以让我插入<eventContent>
并保持段落返回?
我是否要在XSLT中添加一个模板,以使其在<eventContent>
中循环以向每个<p>
添加一个段落返回代码?
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<Root>
<xsl:for-each select="eventlist">
<eventlist>
<xsl:for-each select="event">
<event>
<eventTime><xsl:value-of select="eventTime"/></eventTime>
<eventTitle><xsl:value-of select="eventTitle"/></eventTitle>
<eventContent><xsl:copy-of select="eventContent"/></eventContent>
</event>
</xsl:for-each>
</eventlist>
</xsl:for-each>
</Root>
</xsl:template>
<xsl:template match = "//p" >
<p><xsl:copy-of select = "." /></p><xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
InDesign只是将其作为大块文本导入,而忽略段落返回。
检查您的InDesign XML导入选项。如果选中了“不导入仅包含空格的元素的内容”,则将删除任何单个“空白”外部标签,内部标签的开头或结尾,您将获得此文本块。 解决方案是要么取消选中它(但缩进将作为常规文本安装),要么实现回车编码的字符,例如Nicolai提供的。
答案 1 :(得分:0)
如果要在每个p
元素之后添加显式回车符,则要转换内容,而不是xsl:copy-of select="eventContent">
-将执行深度复制。将xsl:copy-of
更改为xsl:apply-templates select="eventContent/*"
,以使每个p
元素都将与您定义为匹配p
的模板相匹配(顺便说一下,匹配模式{{ 1}}就足够了,不必p
):
//p
由于其他大部分内容都已保留,因此您可以使用修改后的identity transform并避免在XSLT中重复很多XML结构,而不是在根节点的模板中复制大部分内容。 / p>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<Root>
<xsl:for-each select="eventlist">
<eventlist>
<xsl:for-each select="event">
<event>
<eventTime><xsl:value-of select="eventTime"/></eventTime>
<eventTitle><xsl:value-of select="eventTitle"/></eventTitle>
<eventContent><xsl:apply-templates select="eventContent/*"/></eventContent>
</event>
</xsl:for-each>
</eventlist>
</xsl:for-each>
</Root>
</xsl:template>
<xsl:template match="p">
<xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>