# 007 - Parser
## Context
`src/parser/` lee XML existente y construye `Document`. Debe ser seguro por defecto.
Fuente: `plan_libreria_xml_generica_rust.md`, secciones "`xdoc-parser`", "Seguridad por defecto" y "Fase 4 - Parser". Adaptacion local: implementar en `src/parser/`.
## Dependencies
[x] 004 - Core Document Tree.
[] 013 - Security Policies para limites compartidos queda pendiente; esta tarea implementa limites locales en `ParserConfig` y deja la unificacion para `013`.
## Instructions
[x] Crear `src/parser/`.
[x] Implementar `ParserConfig`.
[x] Parsear desde `&str`.
[x] Parsear desde `Read`.
[x] Convertir eventos a `Document`.
[x] Preservar namespaces.
[x] Preservar texto, comentarios y CDATA segun configuracion.
[x] Bloquear entidades externas por defecto.
[x] Reportar errores con linea/columna cuando sea posible.
[x] Agregar tests roundtrip con writer.
## Checklist
[x] `parse_str(xml)` existe.
[x] `parse_reader(reader)` existe.
[x] XML simple produce `Document`.
[x] XML con namespaces produce `QName` correcto.
[x] Atributos se preservan.
[x] Comentarios se preservan o descartan segun config.
[x] CDATA se preserva.
[x] Entidades externas se bloquean.
[x] Profundidad maxima se respeta.
[x] Errores incluyen `Span` cuando aplique.
## Verification
Ejecutar:
```bash
cargo test parser
cargo test parse_str
cargo test namespaces
cargo test security
cargo test roundtrip
```
Criterio medible:
[x] Test roundtrip parsea XML serializado por `src/writer/`.
[x] Test rechaza XML mal formado.
[x] Test rechaza entidad externa.
[x] Test reporta posicion de error para XML mal formado.
[x] Test valida namespace default y prefijo.
## Acceptance Criteria
[x] Parser no accede a red ni filesystem por defecto.
[x] `src/parser/` no depende de builder, query, schema, signature ni dominios.
[x] XML generado por writer se puede leer nuevamente.
## Worklog
[x] Completado el 2026-06-11. Se implemento parser basado en eventos con `quick-xml`, conversion a `core::Document`, namespaces, atributos, comments/CDATA configurables, limites locales, rechazo de DTD/entidades generales no predefinidas y tests roundtrip con writer.