{"id":15068598,"url":"https://github.com/jeidison/paxb","last_synced_at":"2026-02-23T03:23:14.465Z","repository":{"id":46821163,"uuid":"405063048","full_name":"jeidison/paxb","owner":"jeidison","description":"PHP Architecture for XML Binding","archived":false,"fork":false,"pushed_at":"2023-08-29T14:34:31.000Z","size":114,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-28T14:53:46.384Z","etag":null,"topics":["binding","php","php8","xml"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jeidison.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-10T11:52:00.000Z","updated_at":"2024-12-26T23:08:16.000Z","dependencies_parsed_at":"2025-04-06T09:15:36.206Z","dependency_job_id":null,"html_url":"https://github.com/jeidison/paxb","commit_stats":{"total_commits":26,"total_committers":2,"mean_commits":13.0,"dds":"0.038461538461538436","last_synced_commit":"4c49c2e045b6df9c948cad82f94feb721f64fffe"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/jeidison/paxb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeidison%2Fpaxb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeidison%2Fpaxb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeidison%2Fpaxb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeidison%2Fpaxb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jeidison","download_url":"https://codeload.github.com/jeidison/paxb/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeidison%2Fpaxb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280684032,"owners_count":26372970,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-23T02:00:06.710Z","response_time":142,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["binding","php","php8","xml"],"created_at":"2024-09-25T01:38:27.479Z","updated_at":"2025-10-23T19:56:44.461Z","avatar_url":"https://github.com/jeidison.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PAXB (PHP Architecture for XML Binding)\n\n## Intrudução\nO PAXB fornece uma maneira rápida e conveniente de gerar XML a partir de objetos PHP e ler XML em objetos.\nEle suporta uma estrutura de ligação que mapeia elementos e atributos XML para propriedades PHP usando [atributos no PHP 8](https://www.php.net/manual/pt_BR/language.attributes.php). \n\n## Requisitos\n* PHP 8.0+\n* Extensão dom\n\n## Instalação\n\n```bash\ncomposer require jeidison/paxb\n```\n\n## Atributos suportados\n\n- \\#[XmlAttribute]\n- \\#[XmlElement]\n- \\#[XmlRootElement]\n- \\#[XmlTransient]\n- \\#[XmlValue]\n- \\#[XmlType]\n- \\#[XmlPhpTypeAdapter]\n\n## Adaptadores\n\nAo lidar com tipos que precisam de modificações nos valores antes de gerar o XML, podemos escrever um adaptador para \nindicar ao PAXB como gerenciar o valor de um tipo específico.\n\n## Exemplo de adaptador\n```php\n\u003c?php\n...\n\nclass DateBrAdapter implements XmlAdapter\n{\n    public function marshal(mixed $object): mixed\n    {\n        return $object-\u003eformat('d/m/Y');\n    }\n\n    public function unmarshal(mixed $object): mixed\n    {\n        return DateTime::createFromFormat('d/m/Y', $object)\n                       -\u003esetTime(null, null, null);\n    }\n}\n```\n\n## Exemplo de uso dos atributos\n\n```php\n\u003c?php\n...\n\n#[XmlType(propOrder: [\"number\", \"street\", \"fullAddress\"])]\nclass Address\n{\n    #[XmlTransient]\n    private string $fullAddress;\n\n    #[XmlElement(\"street\")]\n    private string $address;\n\n    #[XmlElement]\n    private string $number;\n    \n.\n.\n.    \n\nclass Author\n{\n    #[XmlElement]\n    private string $name;\n\n    #[XmlElement]\n    private ?string $birthday = null;\n\n    #[XmlElement]\n    private ?string $email = null;\n\n    private ?Address $address = null;\n    \n.\n.\n.    \n\n#[XmlRootElement(\"livros\")]\nclass Book\n{\n    #[XmlAttribute(\"identificador\")]\n    private int $id;\n\n    #[XmlElement(\"nome\")]\n    private String $name;\n\n    #[XmlPhpTypeAdapter(DateBrAdapter::class)]\n    private DateTime $data;\n\n    /**@var array\u003cAuthor\u003e */\n    #[XmlElement(\"authors\")]\n    private array $authors;\n    \n    ...\n```\n\n## Gerando XML\n```php\n\u003c?php\n...\n\n$address = new Address();\n$address-\u003esetAddress(\"Rua 10\");\n$address-\u003esetNumber(\"123\");\n$address-\u003esetFullAddress(\"123\");\n\n$author = new Author();\n$author-\u003esetName(\"Jeidison Farias\");\n$author-\u003esetBirthday(\"\");\n$author-\u003esetEmail(\"\");\n$author-\u003esetAddress($address);\n\n$book = new Book();\n$book-\u003esetId(1);\n$book-\u003esetName(\"PHP XML Binding\");\n$book-\u003esetAuthors([$author]);\n$book-\u003esetData(new DateTime());\n$book-\u003esetAddress($address)\n\n$paxb = PAXB::createMarshaller();\n$xml  = $paxb-\u003emarshal($book);\n\necho $xml;\n...\n```\n\n## Exemplo de XML gerado\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003clivros identificador=\"1\"\u003e\n    \u003cnome\u003ePHP XML Binding\u003c/nome\u003e\n    \u003cdate\u003e10/09/2021\u003c/date\u003e\n    \u003cauthors\u003e\n        \u003cname\u003eJeidison Farias\u003c/name\u003e\n        \u003caddress\u003e\n            \u003cnumber\u003e123\u003c/number\u003e\n            \u003cstreet\u003eRua 10\u003c/street\u003e\n        \u003c/address\u003e\n    \u003c/authors\u003e\n\u003c/livros\u003e\n```\n\n## Transformando XML em objetos PHP\n\n```php\n\u003c?php\n...\n\n$xml = 'O seu XML';\n\n$unmarshaller = PAXB::createUnmarshal(Book::class);\n$book = $unmarshaller-\u003eunmarshal($xml);\n\n```\n\u003chr\u003e\n\n## Transformando XSD em classes PHP [WIP]\n\n```php\n\u003c?php\n...\n\n$parameter = new Xsd2PhpParameter;\n$parameter-\u003epathRootXsd = '';\n$parameter-\u003ewithSetters = true;\n$parameter-\u003ewithGetters = true;\n$parameter-\u003enamespace = '';\n$parameter-\u003epathStoreClasses = '';\n\nXsd2Php::instance()-\u003econvert($parameter);\n\n```\n\u003chr\u003e\n\nEsse projeto é inspirado no [JAXB](https://docs.oracle.com/javase/tutorial/jaxb/intro/index.html) da linguagem Java.\n\n## Autor\n- [Jeidison Farias](https://github.com/jeidison)\n\n## License\nThe MIT License (MIT). Please see [License File](LICENSE) for more information.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeidison%2Fpaxb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjeidison%2Fpaxb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeidison%2Fpaxb/lists"}