问题描述
我有这个结构的 XML 文件:
I have this XML-file with this structure:
<?xml version="1.0" encoding="utf-8"?>
<company>
<category>
<category1 name="Office1">
<category2 name="Project1">
<category3 name="Test1"/>
<category3 name="Test2"/>
</category2>
<category2 name="Project2">
<category3 name="Test1"/>
<category3 name="Test2"/>
<category3 name="Test3"/>
</category2>
</category1>
<category1 name="Office2">
<category2 name="Project1">
<category3 name="Test1"/>
<category3 name="Test2"/>
</category2>
<category2 name="Project2">
<category3 name="Test1"/>
<category3 name="Test2"/>
<category3 name="Test3"/>
</category2>
</category1>
</category>
</company>
我想添加一行到公司 -> 类别 -> 类别 1 "Office2" -> 类别 2 "项目 2"该行是:
I want to add a line to company -> category -> category1 "Office2" -> category2 "Project2"The line is:
<category3 name="Test4"/>
我已经试过了:
$Path = "C:\file.xml"
$xml = [xml](get-content $Path)
$xml.Load($Path)
$test = $xml.company.category
$test.category1 *what to do here*
我知道如何用一个子元素来做到这一点,以及如何克隆和添加.但我不知道从哪里开始.
I know how to do this with one sub-element, and how to clone and add. But I don't know where to start with this one.
推荐答案
不知道是否有更短的方法,但这应该有效:
Don't know if there is a shorter way, but this should work:
$Path = "C:\file.xml"
$xml = [xml](get-content $Path)
$xml.Load($Path)
$target = (($xml.company.category.category1|where {$_.name -eq "Office2"}).category2|where {$_.name -eq "Project2"})
$addElem = $xml.CreateElement("Category3")
$addAtt = $xml.CreateAttribute("name")
$addAtt.Value = "Test4"
$addElem.Attributes.Append($addAtt)
$target.AppendChild($addElem)
$xml.Save("C:\file1.xml")
这里的要点是使用 where
获取具有给定属性值的元素以及创建新元素和新属性.
The main points here are the usage of where
to get the elements with the given attribute values and the creation of a new element and a new attribute.
获取目标"元素的另一种可能解决方案是使用 XPath:
Another possible solution to get the "target" element is the usage of XPath:
$target = $xml.SelectSingleNode('//company/category/category1[@name="Office2"]/category2[@name="Project2"]')
这篇关于按属性值选择 XML 元素并添加元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!