【问题标题】:Use Powershell to write XML file in the given order使用 Powershell 按给定顺序编写 XML 文件
【发布时间】: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


【解决方案1】:

使用PrependChild 代替AppendChild

【讨论】:

    猜你喜欢
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2018-01-07
    • 2013-09-25
    • 1970-01-01
    相关资源
    最近更新 更多