这是我的xml文件结构:bookshelf.xml
<?xml version="1.0"?>
<Root>
<bookshelf>
</bookshelf>
</Root>
我只是想在空书架节点上插入一个新的XML节点,这是我的powershell脚本
$xmlPath = ".\bookshelf.xml"
[xml]$myXml = Get-Content -Path $xmlPath -Raw
$bookshelf = $myXml.Root.bookshelf
$bookNode = $myXml.CreateElement("Book");
$bookNode.InnerText = "Book1";
$bookshelf.PrependChild($bookNode);
$myXml.Save($xmlPath)
我在运行时遇到以下异常
Method invocation failed because [System.String] does not contain a method named 'PrependChild'.
At powershell.ps1:7 char:1
+ $bookshelf.PrependChild($bookNode);
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
我尝试调试并检查所选的xml节点是否为空,并且powershell认为它不是xml节点并且抛出异常。在空节点中添加了额外的节点后,它就可以工作了:
<bookshelf>
<test> testdata <test>
</bookshelf>
但是我不喜欢这种情况,它应该能够向空标签插入一个新节点。有人遇到过这个问题吗?
答案 0 :(得分:1)
PowerShell具有一些用于xml文档的帮助程序功能-您的$bookshelf = $myXml.Root.bookshelf
返回的是bookshelf
元素的 InnerText ,而不是元素本身。
如果您执行此操作,它将返回元素...
$bookshelf = $myXml.SelectSingleNode("/Root/bookshelf")
,然后您的示例其余部分将创建一个xml文档,如下所示:
<?xml version="1.0"?>
<Root>
<bookshelf>
<Book>Book1</Book>
</bookshelf>
</Root>