From b7139420575294e1ed9436bdfd02b5737db3361e Mon Sep 17 00:00:00 2001 From: Alek050 Date: Tue, 24 Feb 2026 11:06:11 +0100 Subject: [PATCH 1/4] Added support for DOM in xml feeds --- kloppy/infra/serializers/event/statsperform/parsers/__init__.py | 2 +- kloppy/infra/serializers/tracking/tracab/parsers/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kloppy/infra/serializers/event/statsperform/parsers/__init__.py b/kloppy/infra/serializers/event/statsperform/parsers/__init__.py index 96c6bc29c..4337b1c12 100644 --- a/kloppy/infra/serializers/event/statsperform/parsers/__init__.py +++ b/kloppy/infra/serializers/event/statsperform/parsers/__init__.py @@ -17,7 +17,7 @@ def get_parser( ) -> OptaParser: # infer the data format if not provided if feed_format is None: - if feed.read(1).decode("utf-8")[0] == "<": + if feed.read(10).decode("utf-8").lstrip("\ufeff")[0] == "<": feed_format = "XML" else: feed_format = "JSON" diff --git a/kloppy/infra/serializers/tracking/tracab/parsers/__init__.py b/kloppy/infra/serializers/tracking/tracab/parsers/__init__.py index eeed75585..6b9c6fadf 100644 --- a/kloppy/infra/serializers/tracking/tracab/parsers/__init__.py +++ b/kloppy/infra/serializers/tracking/tracab/parsers/__init__.py @@ -18,7 +18,7 @@ def get_metadata_parser( ) -> TracabMetadataParser: # infer the data format if not provided if feed_format is None: - if feed.read(1).decode("utf-8")[0] == "<": + if feed.read(10).decode("utf-8").lstrip("\ufeff")[0] == "<": feed.seek(0) meta_data = objectify.fromstring(feed.read()) if hasattr(meta_data, "match"): From a0afc238473b532f207e4be5e71f373352b2b535 Mon Sep 17 00:00:00 2001 From: Alek050 Date: Tue, 24 Feb 2026 11:20:22 +0100 Subject: [PATCH 2/4] Changed to 5 bytes instead of 10 --- kloppy/infra/serializers/tracking/tracab/parsers/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kloppy/infra/serializers/tracking/tracab/parsers/__init__.py b/kloppy/infra/serializers/tracking/tracab/parsers/__init__.py index 6b9c6fadf..ad34c09fd 100644 --- a/kloppy/infra/serializers/tracking/tracab/parsers/__init__.py +++ b/kloppy/infra/serializers/tracking/tracab/parsers/__init__.py @@ -18,7 +18,7 @@ def get_metadata_parser( ) -> TracabMetadataParser: # infer the data format if not provided if feed_format is None: - if feed.read(10).decode("utf-8").lstrip("\ufeff")[0] == "<": + if feed.read(5).decode("utf-8").lstrip("\ufeff")[0] == "<": feed.seek(0) meta_data = objectify.fromstring(feed.read()) if hasattr(meta_data, "match"): From 0a0309ad66ff535c3d1a71ba61784c04054c5347 Mon Sep 17 00:00:00 2001 From: Alek050 Date: Tue, 24 Feb 2026 11:22:37 +0100 Subject: [PATCH 3/4] now also for statsperform --- kloppy/infra/serializers/event/statsperform/parsers/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kloppy/infra/serializers/event/statsperform/parsers/__init__.py b/kloppy/infra/serializers/event/statsperform/parsers/__init__.py index 4337b1c12..b5dab333c 100644 --- a/kloppy/infra/serializers/event/statsperform/parsers/__init__.py +++ b/kloppy/infra/serializers/event/statsperform/parsers/__init__.py @@ -17,7 +17,7 @@ def get_parser( ) -> OptaParser: # infer the data format if not provided if feed_format is None: - if feed.read(10).decode("utf-8").lstrip("\ufeff")[0] == "<": + if feed.read(5).decode("utf-8").lstrip("\ufeff")[0] == "<": feed_format = "XML" else: feed_format = "JSON" From ec14b7e3beb5424c5a3426d9b7dd0eb38fd2184d Mon Sep 17 00:00:00 2001 From: Alek050 Date: Tue, 24 Feb 2026 12:57:53 +0100 Subject: [PATCH 4/4] Updated to use utf-8-sig --- kloppy/infra/serializers/event/statsperform/parsers/__init__.py | 2 +- kloppy/infra/serializers/tracking/tracab/parsers/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kloppy/infra/serializers/event/statsperform/parsers/__init__.py b/kloppy/infra/serializers/event/statsperform/parsers/__init__.py index b5dab333c..7475d7355 100644 --- a/kloppy/infra/serializers/event/statsperform/parsers/__init__.py +++ b/kloppy/infra/serializers/event/statsperform/parsers/__init__.py @@ -17,7 +17,7 @@ def get_parser( ) -> OptaParser: # infer the data format if not provided if feed_format is None: - if feed.read(5).decode("utf-8").lstrip("\ufeff")[0] == "<": + if feed.read(4).decode("utf-8-sig")[0] == "<": feed_format = "XML" else: feed_format = "JSON" diff --git a/kloppy/infra/serializers/tracking/tracab/parsers/__init__.py b/kloppy/infra/serializers/tracking/tracab/parsers/__init__.py index ad34c09fd..6dddb23b5 100644 --- a/kloppy/infra/serializers/tracking/tracab/parsers/__init__.py +++ b/kloppy/infra/serializers/tracking/tracab/parsers/__init__.py @@ -18,7 +18,7 @@ def get_metadata_parser( ) -> TracabMetadataParser: # infer the data format if not provided if feed_format is None: - if feed.read(5).decode("utf-8").lstrip("\ufeff")[0] == "<": + if feed.read(4).decode("utf-8-sig")[0] == "<": feed.seek(0) meta_data = objectify.fromstring(feed.read()) if hasattr(meta_data, "match"):