2

我正在尝试在以下 XML 中添加一个子节点。我可以,但我的问题是它在最后添加。<catalog>我如何能够在和之间的开头添加节点<book>

<?xml version="1.0"?>
 <catalog>
 <book id="bk101">
   <author>Gambardella, Matthew</author>
   <title>XML Developer's Guide</title>
   <genre>Computer</genre>
   <price>44.95</price>
   <publish_date>2000-10-01</publish_date>
   <description>An in-depth look at creating applications 
   with XML.</description>
 </book>
 <book id="bk102">
   <author>Ralls, Kim</author>
   <title>Midnight Rain</title>
   <genre>Fantasy</genre>
   <price>5.95</price>
   <publish_date>2000-12-16</publish_date>
   <description>A former architect battles corporate zombies, 
   an evil sorceress, and her own childhood to become queen 
   of the world.</description>
  </book>
  </catalog>

我的代码是:

 [xml]$a = Get-Content 'C:\Users\me\Documents\Scripts\books.xml'
 $ammend =$a.CreateElement("Quarter")
 $a.DocumentElement.AppendChild($ammend)
 $a.save('C:\Users\me\Documents\Scripts\books.xml')
4

2 回答 2

3

您想使用InsertBefore()方法,而不是AppendChild()

$catalog = $a.SelectSingleNode('/catalog')
$a.InsertBefore($ammend,$catalog)

但正如Martin Brandl 指出的那样,为根元素创建同级元素会导致 XML 文档结构无效。


对于更新后的问题,这将是我将采取的方法:

$catalog = $a.SelectSingleNode('/catalog')
$catalog.InsertBefore($ammend, $catalog.FirstChild)
于 2016-08-10T13:27:30.173 回答
2

<catalog>是您的根节点,因此您不能将元素放在它之前,因为您将有两个根节点,这将导致您甚至无法再解析的无效 XML。

于 2016-08-10T13:25:20.580 回答