functions/Convert-HtmlOptionsToObject.ps1

function Convert-HtmlOptionsToObject {
    param (
        [string]
        $HtmlContent
    )

    # Parse HTML into a DOM (relies on ConvertFrom-Html available in the project)
    $doc = $HtmlContent | ConvertFrom-Html
    if (-not $doc) {
        Write-Error "Failed to parse HTML content. Ensure ConvertFrom-Html is available."
        return @()
    }

    $optionNodes = $doc.SelectNodes('.//option')
    $results = @()
    if (-not $optionNodes) { return $results }

    foreach ($opt in $optionNodes) {
        $name = $opt.InnerText.Trim()
        # prefer explicit value attribute, fallback to the visible text
        $value = $opt.GetAttribute('value')
        if (-not $value) { $value = $name }

        $selected = $false
        if ($opt.Attributes['selected']) { $selected = $true }

        # return a PSCustomObject (hash-like) — consistent with Convert-HtmlTableToObject
        $obj = [PSCustomObject]@{
            Name     = $name
            Value    = $value
            Selected = $selected
        }
        $results += $obj
    }

    return $results
}