Я пытаюсь вывести результаты вызова API в предопределенную структуру XML. Я создаю XML в Powershell и добавляю объявление и корневой узел.
Я нашел способ добавить несколько дочерних узлов в другую запись SO. Достаточно глупо, я закрыл вкладку, в которой это было, прежде чем писать это, так что извините, у меня больше нет ссылки.
Как вы можете видеть ниже, корневой узел не является частью определения того, куда должны поступать запрашиваемые значения, он начинается на один уровень ниже корневого узла.
Позже другие элементы также будут добавлены в корневой узел.
То, как я это настроил, работает с циклом, добавляющим нужные мне узлы, когда я замечаю строку:
#$xmlDocument.AppendChild($xmlRoot) | Out-Null
Я получаю вывод:
<?xml version="1.0" encoding="UTF-8"?><DEF><GHJ><GHJ /></GHJ></DEF>
это выглядит нормально, но корневой элемент (очевидно) отсутствует (если я добавляю в эту отмеченную строку, я получаю сообщение об ошибке (переведено с немецкого): «В документе уже есть узел« DocumentElement ».»
Ожидаемый результат
<?xml version="1.0" encoding="UTF-8"?><ABC xmlns:xsi="http://www.w3.org 2001/XMLSchema-instance" noNamespaceSchemaLocation="Dummy.xsd"><DEF><GHJ><GHJ /></GHJ></DEF></ABC>
(Дубликат GHJ специально)
$config = @{Output = @{Root = "ABC"}}
$targetSplit = ("DEF\GHJ\GHJ").Split("\")
# Create XML document
[xml]$xmlDocument = New-Object System.Xml.XmlDocument
# Create XML declaration
$xmlDeclaration = $xmlDocument.CreateXmlDeclaration("1.0","UTF-8",$null)
# Add declaration to XML document
$xmlDocument.AppendChild($xmlDeclaration)
# Create root node
$xmlRoot = $xmlDocument.CreateElement($config.Output.Root)
# Add root attributes
$xmlRoot.SetAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance')
$xmlRoot.SetAttribute('xsi:noNamespaceSchemaLocation', 'Dummy.xsd')
#add root to the document
#$xmlDocument.AppendChild($xmlRoot) | Out-Null
$lastXMLElement = $xmlDocument
for($i = 0; $i -lt $targetSplit.Length; $i++) {
$xmlElement = $xmlDocument.CreateElement($targetSplit[$i])
$lastXMLElement = $lastXMLElement.AppendChild($xmlElement)
}
$xmlDocument.OuterXml