繁体   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