[PowerShell] - как перебрать ноды в моем XML?
От: Glestwid  
Дата: 23.06.23 21:21
Оценка:
Вот мой XML:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<gpx version="1.1" creator="OsmAnd+ 3.9.5" xmlns="http://www.topografix.com/GPX/1/1" xmlns:osmand="https://osmand.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
  <metadata>
    <name>favourites</name>
  </metadata>
  <wpt lat="55.8585655" lon="38.4400009">
    <name>«Московское малое кольцо», А-107</name>
    <type>Bridges</type>
    <extensions>
      <osmand:address>«Московское малое кольцо», А-107</osmand:address>
      <osmand:icon>bridge_structure_suspension</osmand:icon>
      <osmand:background>circle</osmand:background>
      <osmand:color>#eecc22</osmand:color>
    </extensions>
  </wpt>
  <wpt lat="55.955346" lon="37.8313137">
    <name>«Холмогоры», М-8</name>
    <type>Bridges</type>
    <extensions>
      <osmand:icon>bridge_structure_suspension</osmand:icon>
      <osmand:background>circle</osmand:background>
      <osmand:color>#8e2512</osmand:color>
    </extensions>
  </wpt>
  <wpt lat="56.9800593" lon="41.0716759">
    <name>1-я Горинская улица, Иваново</name>
    <type>Bridges</type>
    <extensions>
      <osmand:address>1-я Горинская улица, Иваново</osmand:address>
      <osmand:icon>bridge_structure_suspension</osmand:icon>
      <osmand:background>circle</osmand:background>
      <osmand:color>#eecc22</osmand:color>
    </extensions>
  </wpt>
</gpx>


Вот PowerShell

$fileIn1 = "A.gpx" 

$XPath = "//wpt"

Select-Xml -Path $fileIn1 -XPath $Xpath  | Select-Object -ExpandProperty Node



Почему он мне сейчас ничего не выдает при запуске? И как его поменять, чтобы он начал находить ноды по XPath?
Re: [PowerShell] - как перебрать ноды в моем XML?
От: · Великобритания  
Дата: 23.06.23 21:46
Оценка: 3 (1) +1
Здравствуйте, Glestwid, Вы писали:

G> Вот мой XML:

G> xmlns="http://www.topografix.com/GPX/1/1"
G> $XPath = "//wpt"
Про PowerShell ничего не знаю, но в твоём xpath явно не хватает namespace. Быстрый гуглёж показывает что-то такое:
$ns = @{gpx="http://www.topografix.com/GPX/1/1"}
$XPath = "//gpx:wpt"
Select-Xml -Path $fileIn1 -XPath $Xpath -Namespace $ns
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: [PowerShell] - как перебрать ноды в моем XML?
От: Glestwid  
Дата: 23.06.23 22:06
Оценка:
G>> Вот мой XML:
G>> xmlns="http://www.topografix.com/GPX/1/1"
G>> $XPath = "//wpt"
·>Про PowerShell ничего не знаю, но в твоём xpath явно не хватает namespace. Быстрый гуглёж показывает что-то такое:
·>
·>$ns = @{gpx="http://www.topografix.com/GPX/1/1"}
·>$XPath = "//gpx:wpt"
·>Select-Xml -Path $fileIn1 -XPath $Xpath -Namespace $ns
·>


Фигушки, падает с другим текстом:

Select-Xml : Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function. At Z:\a\1.ps1:9 char:1 + Select-Xml -Path $fileIn1 -XPath $Xpath | Select-Object -ExpandPrope ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: ( [Select-Xml], XPathException + FullyQualifiedErrorId : System.Xml.XPath.XPathException,Microsoft.PowerShell.Commands.SelectXmlCommand

xml/xslt powershell
Re[3]: [PowerShell] - как перебрать ноды в моем XML?
От: · Великобритания  
Дата: 23.06.23 22:17
Оценка: 3 (1) +1
Здравствуйте, Glestwid, Вы писали:

G> ·>Select-Xml -Path $fileIn1 -XPath $Xpath -Namespace $ns

G> Фигушки, падает с другим текстом:

G> At Z:\a\1.ps1:9 char:1 G>+ Select-Xml -Path $fileIn1 -XPath $Xpath | Select-Object -ExpandPrope ...


Я не вижу тут -Namespace
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: [PowerShell] - как перебрать ноды в моем XML?
От: Glestwid  
Дата: 24.06.23 07:30
Оценка:
G>> ·>Select-Xml -Path $fileIn1 -XPath $Xpath -Namespace $ns
G>> Фигушки, падает с другим текстом:

G>> At Z:\a\1.ps1:9 char:1 G>+ Select-Xml -Path $fileIn1 -XPath $Xpath | Select-Object -ExpandPrope ...


·>Я не вижу тут -Namespace


Сорян, я первую строку скопировал из другого примера, взятого со StackOverflow. С
$ns = @{gpx="http://www.topografix.com/GPX/1/1"}

все пошло как надо, спасибо за подсказку
Re: [PowerShell] - как перебрать ноды в моем XML?
От: Igore Россия  
Дата: 29.06.23 16:43
Оценка:
Здравствуйте, Glestwid, Вы писали:

G>$XPath = "//wpt"

Можно еще так попробовать
$XPath = "//*[local-name()='wpt']"



G>Почему он мне сейчас ничего не выдает при запуске? И как его поменять, чтобы он начал находить ноды по XPath?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.