【问题标题】:create new node <xi:include>创建新节点 <xi:include>
【发布时间】:2016-06-09 17:44:34
【问题描述】:
$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="",我不需要。

【问题讨论】:

    标签: xml powershell


    【解决方案1】:

    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

    【讨论】:

    • 我是这样的: 我怎样才能删除 xmlns:xi="xmlns xml" 并像这样
    • @MuhammadVP 为避免这种情况,您需要显式添加并查找 xi 命名空间。查看更新的答案。
    • @MuhammadVP 你在说什么?要使&lt;xi:something&gt; 元素起作用,XML 中的其他地方应该已经有一个定义xmlns:xi="http://..."。如果没有定义命名空间,就不能使用命名空间元素。 AddNamespace() 只是通知命名空间管理器有关命名空间的信息。
    • 这是带有namespaced attr 的命名空间/节点吗? &lt;s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/..'.. 节点和属性具有相似的命名空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多