将XML文件导入InDesign时发生命名空间错误

时间:2014-07-16 10:37:09

标签: xml xslt adobe-indesign

任务是在使用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?

1 个答案:

答案 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>