我有一個 XML 檔案,其中根元素有一個嵌套標簽來標識節點。如何通過根元素中包含的特定標簽來抓取節點?
下面我有一個名為“master”的標簽,它可以包含“舊”或“新”值。我怎么能抓住“新”?
示例檔案:
<xml>
<foo>
<master>New</master>
<data>
<val1>Value</val1>
</data>
</foo>
<foo>
<master>Old</master>
<data>
<val1>Value</val1>
</data>
</foo>
</xml>
Select-XML 不起作用,因為有時檔案具有未關閉的標簽。
使用此代碼,我可以從兩個節點獲取 val1
[xml] $xml = Get-Content "$file"
$xml.xml.foo.data
我試過
$xml.xml.foo.data.val1 | Where-Object ($xml.xml.foo.master -eq "New")
我試過
if ($xml.xml.foo.master -eq "New") {$xml.xml.foo.data.val1}
對不起,如果我的 xml 術語沒有意義。
uj5u.com熱心網友回復:
需要明確的是:如果輸入XML未充分形成(語法有效的XML),沒有決議XML的解決方案將作業-無論是通過[xml]鑄造或通過Select-Xml。
如果你的XML是良好的形成:
通過[xml]和PowerShell 對 XML DOM 的改編:
$xml.xml.foo.Where({ $_.master -eq 'New' }, 'First')
如果要查找具有文本內容的多個 master元素New,請洗掉該'First'引數。
通過Select-Xml(管道到Select-Object -First 1限制為一個匹配項),如果 XML 也是有效的(格式正確并符合參考的模式 - 示例 XML 不適用):
(Select-Xml -XPath '/xml/foo[master="New"]' -LiteralPath file.xml).Node
至于使用Get-Content與[xml]投來決議的XML檔案:
使用
-RawwithGet-Content加快速度。當心可能誤讀XML 檔案 - 請參閱此答案的底部部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/353735.html
上一篇:CM-BERT: Cross-Modal BERT for Text-Audio Sentiment Analysis 閱讀筆記
