src/XLSXParser/Relationships.php
<?php declare(strict_types = 1);
namespace Spaghetti\XLSXParser;
use XMLReader;
use function basename;
/**
* @internal
*/
final class Relationships extends AbstractXMLResource
{
private const WORKSHEET = 'worksheet';
private const STYLES = 'styles';
private const SHARED_STRINGS = 'sharedStrings';
private const RELATIONSHIP = 'Relationship';
private const TARGET = 'Target';
private const TYPE = 'Type';
private const ID = 'Id';
private array $workSheetPaths = [];
private string $sharedStringPath = '';
private string $stylePath = '';
public function __construct(string $path)
{
parent::__construct(path: $path);
$xml = $this->getXMLReader();
while ($xml->read()) {
if (XMLReader::ELEMENT === $xml->nodeType && self::RELATIONSHIP === $xml->name) {
$target = 'xl/' . $xml->getAttribute(name: self::TARGET);
match (basename(path: (string) $xml->getAttribute(name: self::TYPE))) {
self::WORKSHEET => $this->workSheetPaths[$xml->getAttribute(name: self::ID)] = $target,
self::STYLES => $this->stylePath = $target,
self::SHARED_STRINGS => $this->sharedStringPath = $target,
default => null,
};
}
}
$this->closeXMLReader();
}
public function getWorksheetPath(string $rId): string
{
return $this->workSheetPaths[$rId];
}
public function getSharedStringsPath(): string
{
return $this->sharedStringPath;
}
public function getStylesPath(): string
{
return $this->stylePath;
}
}