InDesign支持特殊的格式属性,这使我可以在XML文件中嵌入对段落,字符,表格或单元格样式的引用。导入并布置XML文件时,InDesign使用引用的样式来格式化该元素。但是如何转换<
和>
等来帮助命名空间。
这是我的意见:
<article>
<para><em>Eheniendel il <strong>evel</strong></em>mos illanit atatur <strong>reptatiat</strong></para>
<para>Os veles qui ne voluptaquam, quid qui <strong>rehendi</strong>.</para>
<para>Berchicide <strong>reperumet</strong> ilicitatin <em>cus</em></para>
<para>Dellabores ant. <em>Arte</em> Dandae si <strong>rectur</strong>?</para>
<para>Am, voloribus doluptatem aut, <em>cor</em> aut <em>conse</em></para>
我需要这样的输出:
<article>
<para>
<em aid:cstyle="italic">Eheniendel il <em aid:cstyle="bold-italic">evel</em>
</em>mos illanit atatur <em aid:cstyle="bold">reptatiat</em>
</para>
<para>Os veles qui ne voluptaquam, quid qui <em aid:cstyle="bold">rehendi</em>.</para>
<para>Berchicide <em aid:cstyle="bold">reperumet</em> ilicitatin <em aid:cstyle="italic">cus</em>
</para>
<para>Dellabores ant. <em aid:cstyle="italic">Arte</em> Dandae si <em aid:cstyle="bold">rectur</em>?</para>
<para>Am, voloribus doluptatem aut, <em aid:cstyle="italic">cor</em> aut <em aid:cstyle="italic">conse</em>
</para>
</article>
我需要转换:
<em> to <em aid:csytle = "italic">
<strong> to <em aid:csytle = "bold">
<strong><em> or <em><strong> to <em aid:csytle = "bold-italic">
我制作了xslt 1.0样式表,它适用于普通的xml元素,例如<em>
结束<strong>
。如何根据我的意见改进它?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/"
xmlns:aid5="http://ns.adobe.com/AdobeInDesign/5.0/">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="/root">
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/"
xmlns:aid5="http://ns.adobe.com/AdobeInDesign/5.0/">
<xsl:apply-templates select="@* | node()"/>
</root>
</xsl:template>
<xsl:template match="strong">
<xsl:element name="em">
<xsl:attribute name="aid:cstyle">
<xsl:value-of select="'bold'"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="em">
<xsl:element name="em">
<xsl:attribute name="aid:cstyle">
<xsl:value-of select="'italic'"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="em[../../strong]|strong[../../em]">
<xsl:element name="em">
<xsl:attribute name="aid:cstyle">
<xsl:value-of select="'bold-italic'"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
答案 0 :(得分:0)
最简单的解决方案是串行执行两个XSL转换:第一个转换将执行:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="para">
<xsl:copy>
<xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
并将结果保存到文件中。然后,第二个转换将样式表应用于生成的文件。
替代方案是使用递归命名模板中的字符串函数解析转义的XML的痛苦过程。