php / php/php-src

Mixing processing instructions and element nodes gives inconsistent results in SimpleXML

Offen
#12,168 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Extension: simplexml Status: Verified
Vorherrschende Sprache
C
Sterne
40.4k
Forks
8.2k
Ø Merge
2 T. 13 Std.
Gemergte PRs (30 T.)
96

Beschreibung

Description

The following code:

<?php

$xml = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<container>
    <x/><?hello world?>
</container>
XML;

$sxe = simplexml_load_string($xml);

var_dump($sxe->children());

// x and hello swapped
$xml = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<container>
    <?hello world?><x/>
</container>
XML;

$sxe = simplexml_load_string($xml);

var_dump($sxe->children());

Resulted in this output:

object(SimpleXMLElement)#2 (2) {
  ["x"]=>
  object(SimpleXMLElement)#4 (0) {
  }
  ["hello"]=>
  object(SimpleXMLElement)#5 (0) {
  }
}
object(SimpleXMLElement)#1 (1) {
  ["x"]=>
  object(SimpleXMLElement)#5 (0) {
  }
}

But I expected this output instead:

object(SimpleXMLElement)#2 (2) {
  ["x"]=>
  object(SimpleXMLElement)#4 (0) {
  }
  ["hello"]=>
  object(SimpleXMLElement)#5 (0) {
  }
}
object(SimpleXMLElement)#1 (1) {
  ["hello"]=>
  object(SimpleXMLElement)#%d (0) {
  }
  ["x"]=>
  object(SimpleXMLElement)#%d (0) {
  }
}
PHP Version

PHP 8.1+

Operating System

Linux

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit den beiden PHP-Reproduktionen im Issue und untersuche die SimpleXML-Implementierung und ihre bestehenden Tests zur Reihenfolge von children(). Vergleiche die Verarbeitung von processing-instruction und element-node bei beiden Eingabereihenfolgen, füge anschließend Abdeckung hinzu, die die erwartete Reihenfolge zeigt, und führe die relevanten SimpleXML-Tests aus.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
php
Bereich
backend
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.