Nummerieren Sie die HTML-Überschriften

Nummerieren Sie die HTML-Überschriften

Ich habe eine HTML-Datei, die die folgende Struktur enthält:

<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.

Ich würde vor den Kapitelüberschriften gerne eine Nummer hinzufügen, etwa so:

<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.

Ich habe versucht, Kapitelnummern über CSS mithilfe von Counter-Reset und Counter-Increment für Überschriften einzufügen, aber das funktioniert nur in bestimmten Kontexten.

Gibt es ein Skript (Python, Perl, ???), das nach der Klasse „Abschnitt“ suchen und dann nacheinander Zahlen vor den Kapitelüberschriften einfügen könnte?

Hier ist ein Beispiel der eigentlichen Datei:

<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

Antwort1

Bearbeiten

Nachdem ich Ihre Datei gesehen habe, besteht das Problem darin, dass Sie keine regulären Zeilenenden haben. Tatsächlich sieht es so aus, als wäre Ihre gesamte Datei eine einzige lange Zeile, ist das richtig?

Mein Skript muss Ihre Datei Zeile für Zeile analysieren. Im tatsächlichen Format Ihrer Datei scheinen die Zeilen zufällig umbrochen zu sein, sodass die Analyse sehr schwierig sein wird. Natürlich, wie es ziemlich eloquent, wenn auch ein wenig verrückt, ausgedrückt wurdeHier, Sie sollten HTML niemals mit regulären Ausdrücken analysieren.

Das heißt, das folgende Skript funktioniert mit der Datei, die Sie gepostet haben.


#!/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
}

Antwort2

Sie können wahrscheinlich verwenden<ol>mit<li>?

Ich bin nicht sicher, was Sie mit diesen Tags machen möchten <a>, aber Ihre Kapitel könnten ungefähr so ​​aussehen:

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

Und jeder neue Satz von <ol>Elementen setzt die Nummerierung für Sie zurück.

Antwort3

CSS kann auch dabei helfen, die Nummerierung automatisch vorzunehmen:

a { counter-reset: section; }
h2:before {
    counter-increment: section;
    content: counter(section) ". ";
    display: inline;
}

verwandte Informationen