Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用XSLT编辑多级项目符号列表中的标记_Xml_Xslt_Adobe Indesign - Fatal编程技术网

Xml 使用XSLT编辑多级项目符号列表中的标记

Xml 使用XSLT编辑多级项目符号列表中的标记,xml,xslt,adobe-indesign,Xml,Xslt,Adobe Indesign,以下是一些简单的XML,其中包含多级无序列表,我希望将其导入Adobe InDesign: <?xml version="1.0" encoding="utf-8" standalone="yes"?> <STORY> <Headline>XML test</Headline> <Standfirst><p>Standfirst</p></Standfirst> <Story_text&

以下是一些简单的XML,其中包含多级无序列表,我希望将其导入Adobe InDesign:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<STORY> 
<Headline>XML test</Headline> 
<Standfirst><p>Standfirst</p></Standfirst> 
<Story_text>
<h1>Heading 1</h1> 
<p>para text</p>
<ul>
<li>
    level 1
    <ul>
        <li>
            level 2
            <ul>
                <li>
                    level 3
                    <ul>
                        <li>
                            level 4
                        </li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
</li>
<li>
    level 1
    <ul>
        <li>
            level 2
        </li>
    </ul>
</li>
<li>
    level 1
</li>
</ul>
</Story_text> 
</STORY>

XML测试
第一名

标题1 准文本

  • 一级
    • 二级
      • 三级
        • 四级
  • 一级
    • 二级
  • 一级
InDesign允许您将其段落样式映射到XML标记。(例如,
可以指定给我的标题1段落样式)。这在很大程度上是好的;但是,我的问题出现在多级/嵌套项目符号列表中

为了在InDesign中实现多级项目符号,我为每一级项目符号提供了单独的段落样式。下面是我希望无序列表在InDesign中的显示方式,相关段落样式在括号中

  • 级别1(文本:项目符号1)
    • 第2级(文本:项目符号2)
      • 第3级(文本:项目符号3)
        • 第4级(文本:项目符号4)
  • 级别1(文本:项目符号1)
    • 第2级(文本:项目符号2)
  • 级别1(文本:项目符号1)
问题是InDesign无法区分多级子弹。正如您所期望的,如果我将
  • 指定给其中一个项目符号段落样式,则所有项目符号都将成为该级别,如果我将样式指定给
    ,则相同

    我想使用XSLT输出以下内容:

    <?xml version="1.0" encoding="utf-8" standalone="yes"?> 
    <STORY> 
    <Headline>XML test</Headline> 
    <Standfirst><p>Standfirst</p></Standfirst> 
    <Story_text>
        <h1>Heading 1</h1> 
        <p>para text</p>
    <ul>
    <li1>
        level 1
        <ul>
            <li2>
                level 2
                <ul>
                    <li3>
                        level 3
                        <ul>
                            <li4>
                                level 4
                            </li4>
                        </ul>
                    </li3>
                </ul>
            </li2>
        </ul>
    </li1>
    <li1>
        level 1
        <ul>
            <li2>
                level 2
            </li2>
        </ul>
    </li1>
    <li1>
        level 1
    </li1>
    </ul>
    </Story_text> 
    </STORY>
    
    
    XML测试
    第一名

    标题1 准文本

      一级
        二级
          三级
            四级
      一级
        二级
      一级

    这将允许我在InDesign中将项目符号级别映射到适当的段落样式(例如,
    可以映射到文本:项目符号1,
    映射到文本:项目符号2等等)。我对XML和XSLT非常陌生,因此非常感谢您提供的任何帮助。

    您应该首先从XSLT标识模板开始,将所有元素复制到XML和XSLT中

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    
    请注意,大括号表示一个表达式,它表示要计算的表达式,而不是字面上的输出

    试试这个XSLT

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:output method="xml" indent="no" />
    
        <xsl:template match="li">
          <xsl:element name="li{count(ancestor::li) + 1}">
                <xsl:apply-templates select="@*|node()"/>
          </xsl:element>
        </xsl:template>
    
        <xsl:template match="@*|node()">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:template>
    </xsl:stylesheet>
    

    您应该首先从XSLT标识模板开始,将所有元素复制到未更改的

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    
    请注意,大括号表示一个表达式,它表示要计算的表达式,而不是字面上的输出

    试试这个XSLT

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:output method="xml" indent="no" />
    
        <xsl:template match="li">
          <xsl:element name="li{count(ancestor::li) + 1}">
                <xsl:apply-templates select="@*|node()"/>
          </xsl:element>
        </xsl:template>
    
        <xsl:template match="@*|node()">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:template>
    </xsl:stylesheet>
    
    
    
    非常感谢,解释得也很好!属性值模板是一种有趣的方法。不幸的是,尽管这正是我想要它做的,InDesign仍然对XML不满意。这与XML文件中的unicode有关(特别是段落返回)。XSLT可以用于编辑XML文件中的unicode吗?您可以在包含字符的文本节点上使用
    translate
    函数将其删除<代码>。非常感谢,解释得也很好!属性值模板是一种有趣的方法。不幸的是,尽管这正是我想要它做的,InDesign仍然对XML不满意。这与XML文件中的unicode有关(特别是段落返回)。XSLT可以用于编辑XML文件中的unicode吗?您可以在包含字符的文本节点上使用
    translate
    函数将其删除<代码>。