diff --git a/CHANGELOG.md b/CHANGELOG.md
index 36ddeb857..60a41c8f3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,8 @@
[#1201](https://github.com/nextcloud/cookbook/pull/1201) @christianlupus
- Fix API endpoint helpers to enforce JSON answers and minor styling enhancements
[#1202](https://github.com/nextcloud/cookbook/pull/1202) @christianlupus
+- Fix XPath to allow for microdata parsing with multiple adjacent schema objects in HTML code
+ [#1220](https://github.com/nextcloud/cookbook/pull/1220) @christianlupus
### Maintenance
- Use the pre-built database images for MySQL and PostgreSQL tests
diff --git a/lib/Helper/HTMLParser/HttpMicrodataParser.php b/lib/Helper/HTMLParser/HttpMicrodataParser.php
index 212df4764..3405aed8f 100644
--- a/lib/Helper/HTMLParser/HttpMicrodataParser.php
+++ b/lib/Helper/HTMLParser/HttpMicrodataParser.php
@@ -207,7 +207,7 @@ private function searchSimpleProperties(DOMNode $recipeNode, string $property):
* @return DOMNodeList A list of all found child nodes with the given property
*/
private function searchChildEntries(DOMNode $recipeNode, string $prop): DOMNodeList {
- return $this->xpath->query("//*[@itemprop='$prop']", $recipeNode);
+ return $this->xpath->query(".//*[@itemprop='$prop']", $recipeNode);
}
/**
diff --git a/tests/Unit/Helper/HTMLParser/HttpMicrodataParserTest.php b/tests/Unit/Helper/HTMLParser/HttpMicrodataParserTest.php
index cfab9d273..f96dfc295 100644
--- a/tests/Unit/Helper/HTMLParser/HttpMicrodataParserTest.php
+++ b/tests/Unit/Helper/HTMLParser/HttpMicrodataParserTest.php
@@ -38,6 +38,8 @@ public function dataProvider(): array {
'caseC' => ['caseC.html',false,null],
'caseD' => ['caseD.html',true,'caseD.json'],
'caseE' => ['caseE.html',true,'caseE.json'],
+
+ 'caseIssue1209' => ['caseFix1209.html',true,'caseFix1209.json'],
];
}
@@ -64,6 +66,8 @@ public function testHTMLFile($filename, $valid, $jsonFile): void {
$jsonDest = file_get_contents(__DIR__ . "/res_Microdata/$jsonFile");
$expected = json_decode($jsonDest, true);
+ // print_r(json_encode($res));
+
$this->assertTrue($valid);
$this->assertEquals($expected, $res);
} catch (HtmlParsingException $ex) {
diff --git a/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.html b/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.html
new file mode 100644
index 000000000..5df48aec9
--- /dev/null
+++ b/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.html
@@ -0,0 +1,1338 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Kürbis-Erdäpfel-Gulasch mit Debreziner | Frisch Gekocht
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Ihr Warenkorb ist zurzeit leider noch leer.
+
+
+
+
+
+
+
+
+ Beschreibung
+ Betrag
+
+
+
+ Warenwert Gesamt (inkl. MwSt.)
+ {{basket.data.totalSumOfGoods | currency}}
+
+
+ Differenz zum Mindestbestellwert
+ {{basket.data.toMinimumOrderValue | currency}}
+
+
+ Liefergebühren
+ {{basket.data.costOfDelivery | currency}}
+
+
+ Servicegebühren
+ {{basket.data.serviceFee | currency}}
+
+
+
+ Liefergebühren
+ Servicegebühren
+
+
+ {{0.0 | currency}}
+
+
+
+
+
+
+
Gesamtpreis(inkl. MwSt.)
+
{{basket.data.totalSum | currency}}
+
+
+
+
Ihre Aktions-Ersparnis
+
+ {{basket.data.costSavings | currency}}
+
+
+
+
+
+
+ Ihre mögliche Ersparnis als
+
jö Club Mitglied
+ bis zu
+
{{basket.priceDifferenceLoyaltyToNormal | currency}}
+
+
+
+
+
+
Es konnten leider keine Preise gefunden werden.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Suche
+
+
+
+
+
+
+
+
+
+ Kategorien
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Inhalt der Seite
+
+
+
+
+
+
+
+
+
+
+ Zutaten für
+
+
+
+
+
+
+ Portionen
+
+
+
+
+
+
+
+ 500
+ g
+
+ festkochende Ja! Natürlich Bio-Erdäpfel
+
+
+
+ 600
+ g
+
+ Ja! Natürlich Bio-Hokkaidokürbis
+
+
+
+ 1
+
+
+ gelbe Ja! Natürlich Bio-Zwiebel
+
+
+
+ 2
+
+
+ Ja! Natürlich Bio-Knoblauchzehen
+
+
+
+ 2
+ EL
+
+ Ja! Natürlich Bio-Olivenöl
+
+
+
+ 1
+ EL
+
+ Tomatenmark
+
+
+
+ 800
+ ml
+
+ Gemüsesuppe
+
+
+
+ 3
+ EL
+
+ Ja! Natürlich Bio-Estragonsenf
+
+
+
+ 1
+
+
+ Loorbeerblatt
+
+
+
+ 200
+ g
+
+ Ja! Natürlich Bio Debreziner
+
+
+
+ 2
+
+
+ rote Ja! Natürlich Bio-Spitzpaprika
+
+
+
+ 2
+ EL
+
+ Ja! Natürlich Bio-Petersilienblätter
+
+
+
+
+
+
+ Salz
+
+
+
+
+
+
+ schwarzer Pfeffer aus der Mühle
+
+
+
+
+
+ Zutaten bestellen im
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Zubereitung
+
+
+
+
+
+
+
+
+Erdäpfel schälen, in ca. 2 cm große Würfel schneiden und in kaltes Wasser legen. Kürbis putzen, entkernen und in ebenso große Würfel schneiden. Zwiebel schälen und fein würfeln. Knoblauch schälen und pressen.
+Erdäpfel in einem Sieb gut abtropfen lassen. Öl in einem breiten Topf erhitzen, Zwiebel und Knoblauch hineingeben und ca. 1 Minute anbraten. Erdäpfel und Kürbis dazugeben und unter gelegentlichem Rühren ca. 3 Minuten braten. Tomatenmark unterrühren und kurz anrösten. Suppe, Senf und Lorbeer dazugeben und zugedeckt ca 15 Minuten köcheln lassen.
+
Währenddessen die Debreziner in dicke Scheiben schneiden. Die Stielansätze der Paprika zusammen mit den Kernen aus den Schoten schneiden und die Schoten in dünne Ringe schneiden. Petersilie grob hacken.
+
Etwa ein Drittel des Gulaschs fein pürieren. Paprika und Debreziner unter das Gulasch mischen und offen ca. 5 Minuten köcheln lassen. Mit Salz und Pfeffer abschmecken.
+
Gulasch anrichten, mit Petersilie bestreuen und servieren.
+
+
+
+
+
+
+
+
+
+
+
+
1.21.1+0000000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Liebe BesucherInnen!
+
+Aufgrund technischer Funktionen, die sonst nicht möglich wären, ist unsere Seite nur mit aktivierter JavaScript-Ausführung benutzbar. Bitte aktivieren Sie diese in den Einstellungen Ihres Browsers.
+
+Mit freundlichen Grüßen,
+Ihr Billa Frisch Gekocht Team
+
+
+
+
+
+
diff --git a/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.json b/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.json
new file mode 100644
index 000000000..bfa2c2c78
--- /dev/null
+++ b/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.json
@@ -0,0 +1,28 @@
+{
+ "@type": "Recipe",
+ "@context": "http://schema.org",
+ "name": "Kürbis-Erdäpfel-Gulasch mit Debreziner",
+ "recipeYield": "4 Portionen",
+ "image": [
+ "https://files.billa.at/fg/thema7/20181001_07_g.jpg"
+ ],
+ "recipeIngredient": [
+ "500\n g\n \n festkochende Ja! Natürlich Bio-Erdäpfel",
+ "600\n g\n \n Ja! Natürlich Bio-Hokkaidokürbis",
+ "1\n \n \n gelbe Ja! Natürlich Bio-Zwiebel",
+ "2\n \n \n Ja! Natürlich Bio-Knoblauchzehen",
+ "2\n EL\n \n Ja! Natürlich Bio-Olivenöl",
+ "1\n EL\n \n Tomatenmark",
+ "800\n ml\n \n Gemüsesuppe",
+ "3\n EL\n \n Ja! Natürlich Bio-Estragonsenf",
+ "1\n \n \n Loorbeerblatt",
+ "200\n g\n \n Ja! Natürlich Bio Debreziner",
+ "2\n \n \n rote Ja! Natürlich Bio-Spitzpaprika",
+ "2\n EL\n \n Ja! Natürlich Bio-Petersilienblätter",
+ "Salz",
+ "schwarzer Pfeffer aus der Mühle"
+ ],
+ "recipeInstructions": [
+ "Zubereitung\n \n \n \n \n \n \n\n\nErdäpfel schälen, in ca. 2 cm große Würfel schneiden und in kaltes Wasser legen. Kürbis putzen, entkernen und in ebenso große Würfel schneiden. Zwiebel schälen und fein würfeln. Knoblauch schälen und pressen.\nErdäpfel in einem Sieb gut abtropfen lassen. Öl in einem breiten Topf erhitzen, Zwiebel und Knoblauch hineingeben und ca. 1 Minute anbraten. Erdäpfel und Kürbis dazugeben und unter gelegentlichem Rühren ca. 3 Minuten braten. Tomatenmark unterrühren und kurz anrösten. Suppe, Senf und Lorbeer dazugeben und zugedeckt ca 15 Minuten köcheln lassen.\nWährenddessen die Debreziner in dicke Scheiben schneiden. Die Stielansätze der Paprika zusammen mit den Kernen aus den Schoten schneiden und die Schoten in dünne Ringe schneiden. Petersilie grob hacken.\nEtwa ein Drittel des Gulaschs fein pürieren. Paprika und Debreziner unter das Gulasch mischen und offen ca. 5 Minuten köcheln lassen. Mit Salz und Pfeffer abschmecken.\nGulasch anrichten, mit Petersilie bestreuen und servieren."
+ ]
+ }
diff --git a/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.url b/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.url
new file mode 100644
index 000000000..20b574d66
--- /dev/null
+++ b/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.url
@@ -0,0 +1,2 @@
+https://frischgekocht.billa.at/rezept/kuerbis-erdaepfel-gulasch-mit-debreziner-BI-28065
+