源文件中的XSLT级别,但目标文件中没有级别

时间:2014-09-05 13:38:27

标签: xslt

我有输入fil如图所示,我想要一个如图所示的输出。 我的问题是如何控制列表级别,因为输出文件只有一个级别,所以如果有人有想法我会很开心 源文件可以有两个以上的级别。 输入:

xml version="1.0"?>
<Index>
<Indentatio>
<Explicatus>1)</Explicatus>
<Char>1)on Level 1</Char>
</Indentatio>
<Index>
<Indentatio>
<Explicatus>a)</Explicatus>
<Char> a) on level 2</Char>
</Indentatio>
<Indentatio>
<Explicatus>b)</Explicatus>
<Char> b) on level 2</Char>
</Indentatio>
</Index>
<Indentatio>
<Explicatus>2)</Explicatus>
<Char>1)on Level 1</Char>v
</Indentatio>
</Index>

输出:

<List>
<ListItem Level="1" Class="1">
1) on level 1
1) on level 1
</ListItem>
<ListItem Level="2" Class="1">
<ID>a)</ID>
a) on level 2
</ListItem>
<ListItem Level="2" Class="1">
<ID>b)</ID>
b) on level 2
</ListItem>
<ListItem Level="1" Class="1">
<ID>2)</ID>
2) on level 1
</ListItem>
</List>

1 个答案:

答案 0 :(得分:0)

我猜你想要的东西是:

XSLT 1.0

<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:template match="/">
    <List>
        <xsl:for-each select="//Indentatio">
            <ListItem Level="{count(ancestor::Index)}" Class="1">
                <ID><xsl:value-of select="Explicatus"/></ID>
                <xsl:value-of select="Char"/>
            </ListItem>
        </xsl:for-each>
    </List> 
</xsl:template>

</xsl:stylesheet>

应用于您的输入示例,将返回:

<?xml version="1.0" encoding="UTF-8"?>
<List>
   <ListItem Level="1" Class="1">
      <ID>1)</ID>1)on Level 1</ListItem>
   <ListItem Level="2" Class="1">
      <ID>a)</ID> a) on level 2</ListItem>
   <ListItem Level="2" Class="1">
      <ID>b)</ID> b) on level 2</ListItem>
   <ListItem Level="1" Class="1">
      <ID>2)</ID>1)on Level 1</ListItem>
</List>

请注意,输出混合内容很少是一个好主意。