from kodexa_document import Document
def process_document():
# Create a new document
with Document(inmemory=True) as doc:
# Set document metadata
doc.set_metadata("title", "Invoice Processing Result")
doc.set_metadata("processor", "kodexa-document-example")
doc.add_label("invoice")
# Build document structure
root = doc.create_node("document", "Invoice #12345")
doc.content_node = root
# Add header section
header = doc.create_node("section", "Header", parent=root)
doc.create_node("paragraph", "Vendor: Acme Corp", parent=header)
doc.create_node("paragraph", "Date: 2024-01-15", parent=header)
# Add line items
items = doc.create_node("section", "Line Items", parent=root)
for i, (desc, amount) in enumerate([
("Widget A", 100.00),
("Widget B", 250.00),
("Service Fee", 50.00)
]):
item = doc.create_node("paragraph", f"{desc}: ${amount:.2f}", parent=items)
item.add_feature("line-item", "amount", amount)
item.add_feature("line-item", "index", i)
item.tag("line-item", value=str(amount))
# Add total
total = doc.create_node("paragraph", "Total: $400.00", parent=root)
total.tag("invoice-total", confidence=1.0, value="400.00")
total.add_feature("summary", "calculated", True)
# Query the document
line_items = doc.select("//*[@tag='line-item']")
print(f"Found {len(line_items)} line items")
total_node = doc.select_first("//*[@tag='invoice-total']")
if total_node:
print(f"Invoice total: {total_node.content}")
# Save the result
doc.save("processed_invoice.kddb")
print("Document saved successfully")
if __name__ == "__main__":
process_document()