我需要一些幫助來理解PowerShell中的XML。 我有幾個XML文件是這樣的:使用PowerShell解析帶名稱空間的XML
<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="http://www.example.com/xml/catalog/2006-10-31">
<product product-id="11210">
...
<available-flag>true</available-flag>
<online-flag>false</online-flag>
<online-flag site-id="ru">true</online-flag>
<online-flag site-id="fr">true</online-flag>
<online-flag site-id="uk">false</online-flag>
<online-flag site-id="de">true</online-flag>
...
</product>
<product product-id="50610">
...
<available-flag>true</available-flag>
<online-flag>true</online-flag>
<online-flag site-id="ru">false</online-flag>
<online-flag site-id="fr">true</online-flag>
<online-flag site-id="uk">false</online-flag>
<online-flag site-id="de">fasle</online-flag>
...
</product>
<product product-id="82929">
...
<available-flag>true</available-flag>
<online-flag>true</online-flag>
<online-flag site-id="ru">false</online-flag>
<online-flag site-id="fr">true</online-flag>
<online-flag site-id="uk">false</online-flag>
<online-flag site-id="de">true</online-flag>
...
</product>
</catalog>
我需要兩個元素的值在PowerShell中:
<online-flag>
(不site-id
屬性)<online-flag site-id="ru">
對於帶有product-id="50610"
的產品。
我有以下代碼:
$Path = "C:\Temp\0\2017-08-12_190211.xml"
$XPath = "/ns:catalog/ns:product[@product-id='50610']"
$files = Get-ChildItem $Path | Where {-not $_.PSIsContainer}
if ($files -eq $null) {
return
}
foreach ($file in $files) {
[xml]$xml = Get-Content $file
$namespace = $xml.DocumentElement.NamespaceURI
$ns = New-Object System.Xml.XmlNamespaceManager($xml.NameTable)
$ns.AddNamespace("ns", $namespace)
$product = $xml.SelectSingleNode($XPath, $ns)
}
幾個問題:
有了這個代碼,我可以選擇所需要的產品節點。 PowerShell中顯示:
online-flag : {true, online-flag, online-flag, online-flag...}
但如何然後我可以選擇所需要的
online-flag
元素的值(如果有可能兩種方式:一個的XPath和對象之一)?是否可以用「對象」方式選擇一個節點?就像這樣:
$product = $xml.catalog.product | Where-Object {$_."product-id".value -eq "50610"}
如果我有幾個文件,究竟是選擇文件名,全球在線標誌(無屬性),具體的網上旗的最佳方式?
安斯加爾您好!感謝您的回答。我已經提到這個點符號正在工作,我同意這不方便。你的例子的問題是我的XML文件很大,選擇兩個節點需要時間。首先可以像我的示例中那樣選擇產品,然後使用XPath選擇聯機標記元素的值?在這種情況下,XPath會是什麼? – Alterant
我嘗試了所有以下沒有運氣: $ product.SelectSingleNode(「/ ns:product/ns:online-flag [@ site-id ='ru']」,$ ns), $ product.SelectSingleNode(「/ns:online-flag [@ site-id ='ru']「,$ ns), $,product_SelectSingleNode(」/ product/online-flag [@ site-id ='ru']「), $ product.SelectSingleNode( 「/在線標誌[@站點-ID = 'RU']」)。 This $ product。GetElementsByTagName(「在線標誌」)的作品。但結果不是一個單一的價值,而是一個價值清單。 – Alterant
在這裏找到答案:https://stackoverflow.com/questions/2238201/xmlnode-selectsinglenode-returns-element-outside-current – Alterant