簡體   English   中英

區分標簽名稱和屬性“名稱” XML PowerShell

[英]Differentiate Tag Name and attribute “name” XML PowerShell

我有一個XML輸入,如下所示:

<?xml version="1.0" encoding="utf-8"?>
 <Content>
    <section name="FileID"/>
    <FileID>109F2AEA-6D9C-4127-963A-9C71D4155C5D</FileID>
       <File Path="C:\test.config">
          <Tag TagName="configuration"/>
       </File>
 </Content>

當我對每個節點進行遞歸搜索以使用PowerShell中的以下代碼行來標識名稱為“ FileID”的節點時:

if($ConfigChildItem.Name -eq "FileID")
{
    ...
}

$ ConfigChildItem會以遞歸方式填充來自XML的節點以進行搜索。 通過這種方式,我期望獲得名稱為“ FileID”的節點,例如:

<FileID>109F2AEA-6D9C-4127-963A-9C71D4155C5D</FileID>

但是它正在刪除像這樣的標簽:

<section name="FileID"/>

因為這些文件的屬性“名稱”的值為“ FileID”。 如何僅獲取名稱為“ FileID”的標簽,而不能獲取屬性名稱為“ name”且屬性值作為“ FileID”的標簽呢?

執行此操作的多種方法之一(使用xpath):

$xml = [XML] @'
<?xml version="1.0" encoding="utf-8"?>
 <Content>
    <section name="FileID"/>
    <FileID>109F2AEA-6D9C-4127-963A-9C71D4155C5D</FileID>
       <File Path="C:\test.config">
          <Tag TagName="configuration"/>
       </File>
 </Content>
'@

$expression = "Content/FileID"
$navigator = $xml.PSBase.CreateNavigator()
$node = $navigator.Evaluate($expression)
$node | Select OuterXml # or any other properties

根據您的評論進行編輯:

$xml = [xml](Get-Content "c:\temp\test.xml")
$xml.SelectSingleNode("//FileID")  | ?{ $_.InnerText -eq "109F2AEA-6D9C-4127-963A-9C71D4155C5D" } | %{ $_.InnerText = "blah" }
$xml.Save("c:\temp\test.xml")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM