[PowerShell] - почему имя печатается 2 раза на втором вызове?
От: senglory  
Дата: 05.08.24 17:38
Оценка:
Вот такой скрипт:

Add-Type -AssemblyName System.Web

$fileInGpx = "b.gpx"

[hashtable]$wptsUnique = @{}

[xml]$xml = Get-Content -Path $fileInGpx -Encoding UTF8


function trySetWptColor($wpti, $wptExisting)
{
Write-Host $wpti.name
}

$nsManager = New-Object System.Xml.XmlNamespaceManager($xml.NameTable)
$nsManager.AddNamespace("osmand", "https://osmand.net")
$nsManager.AddNamespace("gpx", "http://www.topografix.com/GPX/1/1")
$XPath = "//gpx:wpt"
$wpts = $xml.selectNodes($XPath, $nsManager)


foreach($wpt in $wpts)
{
    $wpt2 = $null
    $lat2 = $wpt.lat -as [double]
    $lon2 = $wpt.lon -as [double]
    $key = $lat2 + '' + $lon2

    if ($wptsUnique.ContainsKey($key))
    {
        $wptExisting = $wptsUnique[$key]

Write-Host $wpt.name
        trySetWptColor($wpt, $wptExisting)
    }
    else
    {
        $wpt2 = @{
            lat = 1
            lon = 2
            name = $wpt.name
            extensions = "qqq"
        }        
        $wptsUnique.add($key, $wpt2)
    }
}



Вот файл b.gpx

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<gpx
xmlns='http://www.topografix.com/GPX/1/1'
xmlns:osmand='https://osmand.net'
>
<metadata>
<name>M</name>
</metadata>

<wpt lat="55.9840704" lon="36.6401806">
<name>46Н-02865</name>
<type>M</type>
<extensions>
<osmand:address>46Н-02865</osmand:address>
<osmand:icon>special_star</osmand:icon>
<osmand:background>circle</osmand:background>
<osmand:color>#eecc22</osmand:color>
</extensions>
</wpt>
<wpt lat="55.98407" lon="36.640181">
<name>46Н-02865</name>
<type>M</type>
<extensions>
<osmand:address>46Н-02865</osmand:address>
<osmand:icon>bridge_structure_suspension</osmand:icon>
<osmand:background>circle</osmand:background>
<osmand:color>#eecc22</osmand:color>
</extensions>
</wpt>

</gpx>


Почему при его запуске получается такой странный вывод?

46Н-02865 46Н-02865 46Н-02865


Write-Host с строки 33 выдает нормальное имя, и тут же с 12 — задвоенное. Почему так?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.