任务是在使用XSL转换处理该文件时将XML文件导入InDesign CS6。为了将段落样式应用于导入的文本,通过XSLT添加属性“aid:pstyle”。一个非常简短的例子:
要导入的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Paragraph>This is my first XML-Import.</Paragraph>
</Root>
XSL转换:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/"
version="2.0">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Paragraph">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="aid:pstyle">
<xsl:value-of select="'myParagraphStyle'"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()|comment()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
在输入文件外部运行XSLT,我们得到
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Paragraph xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/" aid:pstyle="myParagraphStyle">This is my first XML-Import.</Paragraph>
</Root>
可以导入到具有所需结果的InDesign中。 但是,当我们导入主要输入并在导入期间应用XSLT 时,InDesign会抱怨错误的命名空间。错误消息是“DOM-Transformationsfehler:UngültigesNamespace”(我们有一个德语InDesign版本,英文版应该有点像“DOM-Transformation error:illegal namespace。”)
如何在导入时应用XSLT时如何获取我的XML?
答案 0 :(得分:2)
首先,我认为您使用错误的命名空间IRI for xmlns:aid,但重新访问我发现的其他示例&#34; http://ns.adobe.com/Adobe InDesign / 4.0 /&#34;还有一张空格和&#34; http://ns.adobe.com/AdobeInDesign/4.0/&#34;用过的。实际上后者似乎是正确的,因为插件SDK具有匹配的定义。
然后是样式表版本=&#34; 2.0&#34;看起来有点大胆,我把它改成&#34; 1.0&#34;但它仍然没有导入。
最后我明白了:InDesign 非常挑剔名称空间。显然,名称空间必须在根元素处引入。以下版本适用于我的InDesign CS6:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/" version="1.0">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Root">
<Root xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/">
<xsl:apply-templates/>
</Root>
</xsl:template>
<xsl:template match="Paragraph">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="aid:pstyle">
<xsl:value-of select="'myParagraphStyle'"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()|comment()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>