-1

次のような名前空間を持つ XML があります。

 <WDA.Application.Configuration xmlns="WDA.Application.Configuration">
      <Portals>
        <Portal PortalID="jhgjuhu6yu8678" Type="default" />
      </Portals>
    </WDA.Application.Configuration>

xパスを抽出してSelectSingleNode(* xpath *)を呼び出すにはどうすればよいですか。名前空間の登録について知りましたが、どうすればそれを正確に使用できるかは明確ではありません。誰か助けてください:)

4

2 に答える 2

2

複数の名前空間に慣れていないため、まだ xpath を理解していませんが、powershell xml-parser を使用しないのはなぜですか?

$xml = [xml](Get-content c:\myfile.xml)

#GetElementsByTagName(tagname, namespace)
$xml.GetElementsByTagName("WDA.Application.Configuration", "WDA.Application.Configuration") | 
ForEach-Object {
    $_.Portals.Portal.PortalID = "testvalueforportalid"
    }

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

更新xpath で名前空間を使用するには、最初に名前空間マネージャーに登録する必要があります。サンプル:

$xml = [xml](Get-Content .\test.xml)
$ns = New-Object Xml.XmlNamespaceManager $xml.NameTable
$ns.AddNamespace("ns1", "WDA.Application.Configuration")
$xml.SelectSingleNode('//ns1:WDA.Application.Configuration', $ns)


xmlns                                             Portals                                          
-----                                             -------                                          
WDA.Application.Configuration                     Portals                                          
于 2013-05-15T12:10:36.130 に答える
0

通常、属性は名前空間で修飾されていないことに注意してください。この場合、探している PortalID が 1 つしかない場合は、名前空間をいじる必要はありません。

 $xml = [xml]@'
 <WDA.Application.Configuration xmlns="WDA.Application.Configuration">
      <Portals>
        <Portal PortalID="jhgjuhu6yu8678" Type="default" />
      </Portals>
    </WDA.Application.Configuration>
'@

$xml | Select-Xml -XPath '//@PortalID' | Foreach {$_.Node.'#text' = 'abcd'}
$xml | Format-Xml

出力:

<WDA.Application.Configuration xmlns="WDA.Application.Configuration">
  <Portals>
    <Portal PortalID="abcd" Type="default" />
  </Portals>
</WDA.Application.Configuration>

Format-XmlPSCXコマンドレットであることに注意してください。

名前空間を使用して特定の要素をフィルタリングする必要がある場合は、それらをハッシュテーブルに入れて次のSelect-Xmlように渡すことができます。

... | Select-Xml -XPath '//dns:Portal' -Namespace @{dns='WDA.Application.Configuration'} 
于 2013-05-15T15:10:22.330 に答える