数字html标题


0

我有一个HTML文件,其中包含以下结构:

<h1 class="section">First title</h1>
  <div><h2 class="chapter">Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">Chapter title</h2>
     Chapter text here.
<h1 class="section">Second title</h1>
  <div><h2 class="chapter">Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">Chapter title</h2>
     Chapter text here.

我想在章节标题之前添加一个数字,如下所示:

<h1 class="section">First title</h1>
  <div><h2 class="chapter">1. Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">2. Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">3. Chapter title</h2>
     Chapter text here.
<h1 class="section">Second title</h1>
  <div><h2 class="chapter">1. Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">2. Chapter title</h2>
     Chapter text here.
  <div><h2 class="chapter">3. Chapter title</h2>
     Chapter text here.

我尝试使用针对标题的计数器重置和计数器增量通过CSS插入章节编号,但这仅在某些情况下有效。

是否有一个脚本(python,perl,???)可以搜索class =“ section”,然后在章节标题之前顺序插入数字?

这是实际文件的示例:

<body><div class='root'><h1 class="section">Génesis</h1><div><h2
class="chapter">Dios ordena el universo</h2><div>01 En el principio,
cuando Dios creó los cielos y la tierra, </div><div>02 todo era
confusión y no había nada en la tierra. Las tinieblas cubrían los
abismos mientras el espíritu de Dios aleteaba sobre la superficie de
las ag [many lines here] </div><div><h2 class="chapter">Descanso del
séptimo día</h2><div>01 Así estuvieron [many lines here] <div
class='root'><h1 class="section">Éxodo</h1><div><h2 class="chapter">Los
hebreos se multiplican en Egipto</h2><div>01 Estos son los nombres de
los hijos de Israel que llegaron con Jacob a Egipto, cada uno con su
familia:</div><div>02 Rubén, Simeón, Leví, Judá,</div><div>03 Isacar,
[many lines here] etc, etc

Answers:


1

编辑

既然我已经看到了您的文件,那么问题在于您没有规则的行尾。实际上,您的整个文件看起来像是一长行,对吗?

我的脚本取决于逐行解析文件。在文件的实际格式中,这些行似乎是随机断开的,因此将很难解析。当然,正如在这里有些陈词滥调所表达的那样,您绝不应该使用正则表达式来解析HTML。

就是说,下面的脚本适用于您发布的文件。


#!/usr/bin/perl 

my $file=<>; ## Load the file into memory
my $a=1;     ## Set up a counter

## Split the file on each occurence of
## 'class="chapter"' and save into the array @b
my @b=split(/class=.chapter.>/,$file);

## Print the beginning of the file
## and remove it from the array.
print shift(@b);

## Now, go through the array, adding the counter ($a)
## to each chapter heading.
foreach (@b) {
    ## Print 'class="chapter"', the counter and 
    ## the rest of the text until the next chapter heading
    print "class=\"chapter\">$a. $_"; 

    $a++;   ## Increment the counter
    $a=1 if /class="section"/; ## reset the counter
}

我尝试过,但是没有用。我不了解perl,但如果我了解一点点,此脚本将在标题中查找“ Heading”。上面的“标题1”和“标题2”是示例。所有这些<a>标记的共同点是class =“ section”而不是标题。我修改了上面的示例,这可能会有所帮助。
要不要

@ToDo,我修改了脚本,现在应该可以使用
terdon

还是行不通。没有错误讯息。也许如果您能解释不同行的含义,那么我可以尝试调试,如果麻烦不大的话。
要不要

@ToDo,添加了评论。发布的脚本适用于您问题中的示例。它是您实际文件的摘录吗?如果不行,请发布文件,格式上的任何细微变化都会破坏脚本,如果可以看到实际文件,我可以使其更通用。
terdon

我添加了实际文件的样本。我修改的文件结构,以及与替代<A> <H1>
待办事项

3

您可以使用大概<ol><li>

我不确定您要如何使用这些<a>标记,但是您的章节可能看起来像这样:

<ol>
  <li class="chapter">Chapter title</li>
  <li class="chapter">Chapter title</li>
  <li class="chapter">Chapter title</li>
</ol>

每套新的<ol>元素都会为您重置编号。


0

CSS还可以帮助它自动编号:

a { counter-reset: section; }
h2:before {
    counter-increment: section;
    content: counter(section) ". ";
    display: inline;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.