Нужно взять атрибут label в заголовок - PullRequest
0 голосов
/ 18 октября 2019

У меня xml будет выглядеть так:

<sect1 label="Chapter 1:">
   <title>Pass</title>
   <sect2 label="1.1">
      <title>Pass 1</title>
      <sect3 label="1.1.1">
         <title>Pass 2</title>
         <sect4 label="1.1.1.1">
            <title>Pass 3</title>
         </sect4>
      </sect3>
    </sect2>
</sect1>

XSL Пробовал как:

<xsl:template match="/">
    <xsl:text>Heading,,,,,Sub Heading</xsl:text>
        <xsl:for-each select="//title[starts-with(name(..), 'sect')] ">
        <xsl:value-of select="for $i in 1 to count(ancestor::*) - 1 return ','" separator=""/>
        <xsl:value-of select="."/>
            <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
</xsl:template>

Получение вывода:

Heading,,,,,Sub Heading
Pass
,Pass 1
,,Pass 2
,,,Pass 3

Ожидаемый результат будетbe:

Heading,,,,,Sub Heading
Chapter 1: Pass
,1.1 Pass 1
,,1.1.1 Pass 2
,,,1.1.1.1 Pass 3

Мне нужен атрибут label перед заголовком.

1 Ответ

0 голосов
/ 18 октября 2019

Я думаю, все, что вам нужно сделать, это изменить это ...

<xsl:value-of select="."/>

на это, чтобы включить атрибут label родителя

<xsl:value-of select="../@label, ."/>

Попробуйте этот блок (гдеЯ немного упростил xsl:for-each и добавил строку после строки заголовка

<xsl:template match="/">
    <xsl:text>Heading,,,,,Sub Heading&#10;</xsl:text>
    <xsl:for-each select="//*[starts-with(name(), 'sect')]/title">
        <xsl:value-of select="for $i in 1 to count(ancestor::*) - 1 return ','" separator=""/>
        <xsl:value-of select="../@label, ."/>
        <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
</xsl:template>
...