Добавить атрибут XML с пространством имен - PullRequest
0 голосов
/ 21 февраля 2019

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

Вот то, что я пытаюсь воссоздать:

<IP_Filter_Template_Guid dt:dt="string" xmlns:dt="urn:schemas-microsoft-com:datatypes">

Вот код, который я использую:

$xml = [System.Xml.XmlDocument](Get-Content $xmldoc)

$child1element = $xml.CreateElement($rapname)
$child1element.SetAttribute("name", $rapname)
$child1 = $xml.Root.Children.Microsoft_Internet_Authentication_Service.Children.RadiusProfiles.Children.AppendChild($child1element)

$child2element = $xml.CreateElement("Properties")
$child2 = $child1.AppendChild($child2element)

$child3element1 = $xml.CreateElement("IP_Filter_Template_Guid", $xmlns)
$child3element1.SetAttribute("dt", "urn:schemas-microsoft-com:datatypes", "string")
$child3element1.SetAttribute("dt", "urn:schemas-microsoft-com:xmlns", "urn:schemas-microsoft-com:datatypes")

$child3 = $child2.AppendChild($child3element1)

$child3element1.AppendChild($xml.CreateTextNode("{00000000-0000-0000-0000-000000000000}"))

$xml.Save("c:\xml.xml")

Вот вывод, который яполучить за элемент:

<IP_Filter_Template_Guid d9p1:dt="urn:schemas-microsoft-com:datatypes" dt:dt="string" xmlns:d9p1="urn:schemas-microsoft-com:xmlns">

1 Ответ

0 голосов
/ 21 февраля 2019

Сначала создайте новый узел в виде простого XML-узла (менеджер пространства имен не требуется):

$node = $xml.CreateElement('IP_Filter_Template_Guid')

Создайте новый атрибутный узел с нужным пространством имен и присвойте ему значение:

$ns   = 'urn:schemas-microsoft-com:datatypes'
$attr = $xml.CreateAttribute('dt', 'dt', $ns)
$attr.Value = 'string'

Добавьте атрибут к узлу XML, используя SetAttributeNode() (, а не SetAttribute()!):

$node.SetAttributeNode($attr)

Демонстрация:

PS C:\> <b>[xml]$xml = '<root/>'</b>
PS C:\> <b>$node = $xml.CreateElement('IP_Filter_Template_Guid')</b>
PS C:\> <b>$ns = 'urn:schemas-microsoft-com:datatypes'</b>
PS C:\> <b>$attr = $xml.CreateAttribute('dt', 'dt', $ns)</b>
PS C:\> <b>$attr.Value = 'string'</b>
PS C:\> <b>$node.SetAttributeNode($attr) >$null</b>
PS C:\> <b>$node.OuterXml</b>
<IP_Filter_Template_Guid dt:dt="string" xmlns:dt="urn:schemas-microsoft-com:datatypes" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...