【发布时间】:2021-08-31 01:27:15
【问题描述】:
我有一个如下所示的 xml 文件
<Books>
<Book rev="19ver" nver="1.0.0.0" >
<Book rev="19Sub4" nver="1.4.0.250">
<Book rev="19Sub5" nver="1.5.0.250" >
<Book rev="19Sub5Fix1" nver="1.5.1.250" >
</Book>
</Book>
</Book>
<Book rev="20ver" nver="2.0.0.0" >
<Book rev="20Sub1" nver="2.1.0.769" >
<Book rev="20Sub1Fix7" nver="2.1.7.769" >
</Book>
<Book rev="20Sub1Fix6" nver="2.1.6.769" >
</Book>
<Book rev="20Sub1Fix4" nver="2.1.4.769" >
</Book>
<Book rev="20Sub1Fix3" nver="2.1.3.769" >
</Book>
<Book rev="20Sub1Fix2" nver="2.1.2.769" >
</Book>
<Book rev="20Sub1Fix1" nver="2.1.1.769" >
</Book>
</Book>
<Book rev="20Sub3" nver="2.3.0.1111">
<Book rev="20Sub3Fix5" nver="2.3.5.1111" >
</Book>
<Book rev="20Sub3Fix4" nver="2.3.4.1111" >
</Book>
<Book rev="20Sub3Fix3" nver="2.3.3.1111" >
</Book>
<Book rev="20Sub3Fix2" nver="2.3.2.1111" >
</Book>
<Book rev="20Sub4" nver="2.4.0.1567" >
<Book rev="20Sub4Fix5" nver="2.4.5.1567" >
</Book>
<Book rev="20Sub4Fix4" nver="2.4.4.1567" >
</Book>
<Book rev="20Sub4Fix3" nver="2.4.3.1567" >
</Book>
<Book rev="20Sub4Fix2" nver="2.4.2.1567" >
</Book>
<Book rev="20Sub4Fix1" nver="2.4.1.1567" >
</Book>
</Book>
</Book>
</Book>
</Book>
</Books>
我有一个 powershell 脚本来在指定节点内添加一个新元素。例如,如果我想在“20Sub3”中输入带有rev“20Sub3Fix6”和nver“2.3.6.1111”的元素,我可以使用以下代码。
$parentXML = Select-Xml -Xml $bookInfo -XPath "//*[@rev='20Sub3']"
$bookInfo = Get-Content -Raw -Path $XMLPATH
$book = $bookInfo.CreateNode("element","book","")
$book.SetAttribute("rev","20Sub3Fix6")
$book.SetAttribute("nver","2.3.6.1111")
$rslt = $parentXML.Node.AppendChild($book)
$bookInfo.Save($XMLPATH)
我正在寻找的是,当我添加一个新元素时,它应该按照给定的顺序出现。这意味着“20Sub3Fix6”元素应该在“20Sub3Fix5”元素之上。但现在它在“20Sub3Fix2”之后。
预期的 XML 格式如下所示
<Book rev="20Sub3" nver="2.3.0.1111">
<Book rev="20Sub3Fix6" nver="2.3.6.1111" >
</Book>
<Book rev="20Sub3Fix5" nver="2.3.5.1111" >
</Book>
<Book rev="20Sub3Fix4" nver="2.3.4.1111" >
</Book>
<Book rev="20Sub3Fix3" nver="2.3.3.1111" >
</Book>
<Book rev="20Sub3Fix2" nver="2.3.2.1111" >
</Book>
</Book>
我应该对我的代码进行哪些更改才能获得预期的 XML 格式?
【问题讨论】:
-
我没有看到任何与 C# / .net 相关的内容。为什么要标记它?
-
Powershell 支持 .net 对象。如果您知道 C# 中的答案,请发布我可以将其转换为 powershell
-
啊,我明白了。也许在问题中就这一事实写一行。
标签: xml powershell