$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="" />

问题是:
  • 我需要xi:include,但它以include开头。
  • 我正在获取xmlns="",我不需要。
  • 最佳答案

    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

    关于xml - 创建新节点<xi:include>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35652915/

    10-16 10:50