创建新节点<xi:include>

时间:2016-02-26 13:24:09

标签: xml powershell

$club = $xml.CreateElement('xi:include')
$club.SetAttribute('href','barracas')
$lookupNode.AppendChild($club) >$null
$xml.Save($config_filename)

在上面的PowerShell片段中,$lookupNode是我追加新创建的节点$club的节点。

我期望在下面添加一行。

<xi:include href="barracas" />

实际上我得到的是下面一行。

<include href="barracas" xmlns="" />

问题是:

  1. 我需要xi:include,但它始于include
  2. 我得到xmlns="",我不需要。

1 个答案:

答案 0 :(得分:3)

XML元素中以冒号分隔的前缀表示namespace

<foo:bar baz='something'>else</foo:bar>
  ^   ^   ^       ^       ^
  |   |   |       |       `- node value/text
  |   |   |       `- attribute value/text
  |   |   `- attribute name
  |   `- node name
  `- namespace name

您需要namespace manager来处理这些:

[Xml.XmlNamespaceManager]$nsm = $xml.NameTable
$nsm.AddNamespace('ns', $xml.DocumentElement.NamespaceURI)
$nsm.AddNamespace('xi', 'http://...')

$club = $xml.CreateElement('xi:include', $ns.LookupNamespace('xi'))
$club.SetAttribute('href', 'barracas')
$xml.DocumentElement.AppendChild($club) >$null

另见this related question