Zachary.shupp Ответов: 1

Добавление данных в XML-файл


Я работал над xml-структурой, и у меня возникли проблемы с добавлением к определенной части XML-файла, и мне нужна помощь. Моя цель - добавить новую категорию под узлом категории. ниже приведен мой текущий код.

$Path = "C:\Users\shuppz\Desktop\XML\Helpbox.xml"

$xmlDoc = [System.Xml.XmlDocument](Get-Content $Path)
		
#Create New Category
$newCat = $xmlDoc.AdminLauncher.Categories.AppendChild($xmlDoc.CreateElement("Category"))
		
#Set Attributes
$newCat.SetAttribute("Selected", "False")
$newCat.SetAttribute("Name", $Name)

#Save File
$xmlDoc.Save($Path)


Мой XML-файл:

<?xml version="1.0"?>
<!--XML For Admin Launcher-->
<AdminLauncher>
  <Categories />
  <Task Name="GPMC" Category="Tools">
    <Path>C:\Windows</Path>
    <Arg>/offerra</Arg>
  </Task>
</AdminLauncher>




Когда я запускаю его я получаю следующие ошибки:

Method invocation failed because [System.String] doesn't contain a method named 'AppendChild'.
At C:\Users\shuppz\AppData\Local\Temp\5564e900-f0cf-4878-8c39-9fc3aff6ed8e.ps1:6 char:55
+ $newCat = $xmlDoc.AdminLauncher.Categories.AppendChild <<<< ($xmlDoc.CreateElement("Category"))
    + CategoryInfo          : InvalidOperation: (AppendChild:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
You cannot call a method on a null-valued expression.
At C:\Users\shuppz\AppData\Local\Temp\5564e900-f0cf-4878-8c39-9fc3aff6ed8e.ps1:9 char:21
+ $newCat.SetAttribute <<<< ("Selected", "False")
    + CategoryInfo          : InvalidOperation: (SetAttribute:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
You cannot call a method on a null-valued expression.
At C:\Users\shuppz\AppData\Local\Temp\5564e900-f0cf-4878-8c39-9fc3aff6ed8e.ps1:10 char:21
+ $newCat.SetAttribute <<<< ("Name", $Name)
    + CategoryInfo          : InvalidOperation: (SetAttribute:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Zoltán Zörgő

Не могли бы вы опубликовать пример XML-файла?

RedDk

Быстрая проверка с помощью VisualStudio 2010 "Object Browser" -> System.Xml.XmlDocument не дает никаких подсказок. Проверка -> Система.Строка также не дает никаких подсказок. Откуда взялся этот сценарий?

RedDk

Кроме того, есть System.XMLNode и System.XMLPAttribute, у которых есть метод "AppendChild", как вы говорите.

Sergey Alexandrovich Kryukov

Если вы действительно хотите добавить к XML, а не вставить что-то, это невозможно в принципе. Это также дало бы файл, который не является хорошо сформированным XML. Дело в том, что просто ваша формулировка в названии вопроса неверна. Вам нужно добавить ребенка.
—СА

1 Ответов

Рейтинг:
7

Zoltán Zörgő

Не могли бы вы опубликовать пример XML-файла?
Я не думаю, что вы можете обратиться к узлу следующим образом: ".AdminLauncher.Категории", вы должны выбрать его, чтобы иметь возможность добавить дочерний узел.
Что-то вроде этого:

$newCat = $xmlDoc.CreateElement("Category")
$xmlDoc.SelectSingleNode("//AdminLauncher/Categories").AppendChild($newCat)