Condividi tramite


Select-Xml

Trova il testo in una stringa o in un documento XML.

Sintassi

Select-Xml
      [-XPath] <string>
      [-Xml] <XmlNode[]>
      [-Namespace <hashtable>]
      [<CommonParameters>]
Select-Xml
      [-XPath] <string>
      [-Path] <string[]>
      [-Namespace <hashtable>]
      [<CommonParameters>]
Select-Xml
      [-XPath] <string>
      -LiteralPath <string[]>
      [-Namespace <hashtable>]
      [<CommonParameters>]
Select-Xml
      [-XPath] <string>
      -Content <string[]>
      [-Namespace <hashtable>]
      [<CommonParameters>]

Descrizione

Il Select-Xml cmdlet consente di usare query XPath per cercare testo in stringhe e documenti XML. Immettere una query XPath e usare il parametro Content, Path o Xml per specificare il codice XML da cercare.

Esempio

Esempio 1: Selezionare nodi AliasProperty

In questo esempio vengono recuperate le proprietà alias in Types.ps1xml. Per informazioni su questo file, vedere about_Types.ps1xml.

Il primo comando salva il percorso del Types.ps1xml file nella $Path variabile .

Il secondo comando salva il percorso XML nel nodo AliasProperty nella $XPath variabile.

Il Select-Xml cmdlet ottiene i nodi AliasProperty identificati dall'istruzione XPath dal Types.ps1xml file. Il comando usa un operatore pipeline (|) per inviare i nodi AliasProperty al Select-Object cmdlet. Il parametro ExpandProperty espande l'oggetto Node e restituisce le proprietà Name e ReferencedMemberName .

$Path = "$Pshome\Types.ps1xml"
$XPath = "/Types/Type/Members/AliasProperty"
Select-Xml -Path $Path -XPath $Xpath | Select-Object -ExpandProperty Node

Name                 ReferencedMemberName
----                 --------------------
Count                Length
Name                 Key
Name                 ServiceName
RequiredServices     ServicesDependedOn
ProcessName          Name
Handles              Handlecount
VM                   VirtualSize
WS                   WorkingSetSize
Name                 ProcessName
Handles              Handlecount
VM                   VirtualMemorySize
WS                   WorkingSet
PM                   PagedMemorySize
NPM                  NonpagedSystemMemorySize
Name                 __Class
Namespace            ModuleName

Il risultato mostra il nome e referencedMemberName di ogni proprietà alias nel Types.ps1xml file. Ad esempio, esiste una proprietà Count che è un alias della proprietà Length .

Esempio 2: Immettere un documento XML

In questo esempio viene illustrato come utilizzare il parametro XML per fornire un documento XML al Select-Xml cmdlet .

Il Get-Content cmdlet ottiene il contenuto del Types.ps1xml file e lo salva nella $Types variabile . Esegue [xml] il cast della variabile come oggetto XML.

Il Select-Xml cmdlet ottiene i nodi MethodName nel Types.ps1xml file. Il comando usa il parametro Xml per specificare il contenuto XML nella $Types variabile e il parametro XPath per specificare il percorso del nodo MethodName .

[xml]$Types = Get-Content $Pshome\Types.ps1xml
Select-Xml -Xml $Types -XPath "//MethodName"

Esempio 3: Cercare i file della Guida di PowerShell

Questo esempio illustra come usare il Select-Xml cmdlet per eseguire ricerche nei file della Guida dei cmdlet basati su XML di PowerShell. In questo esempio viene cercato il nome del cmdlet che funge da titolo per ogni file della Guida e il percorso del file della Guida.

La $Namespace variabile contiene una tabella hash che rappresenta lo spazio dei nomi XML utilizzato per i file della Guida.

La $Path variabile contiene il percorso dei file della Guida di PowerShell. Se nel computer non sono presenti file della Guida, usare il Update-Help cmdlet per scaricare i file della Guida. Per altre informazioni sulla Guida aggiornabile, vedere about_Updatable_Help.

Il Select-Xml cmdlet cerca i nomi dei cmdlet nei file XML trovando Command:Name l'elemento in qualsiasi punto dei file. I risultati vengono archiviati nella $Xml variabile . Select-Xmlrestituisce un oggetto SelectXmlInfo con una proprietà Node, ovvero un oggetto System.Xml.XmlElement. La proprietà Node dispone di una proprietà InnerXML che contiene il codice XML effettivo recuperato.

La $Xml variabile viene inviata tramite pipe al Format-Table cmdlet . Il Format-Table comando usa una proprietà calcolata per ottenere la proprietà Node.InnerXML di ogni oggetto nella $Xml variabile, tagliare lo spazio vuoto prima e dopo il testo e visualizzarlo nella tabella, insieme al percorso del file di origine.

$Namespace = @{
    command = "http://schemas.microsoft.com/maml/dev/command/2004/10"
    maml = "http://schemas.microsoft.com/maml/2004/10"
    dev = "http://schemas.microsoft.com/maml/dev/2004/10"
}

$Path = "$Pshome\en-us\*dll-Help.xml"
$Xml = Select-Xml -Path $Path -Namespace $Namespace -XPath "//command:name"
$Xml | Format-Table @{Label="Name"; Expression= {($_.node.innerxml).trim()}}, Path -AutoSize

Name                    Path
----                    ----
Export-Counter          C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Diagnostics.dll-Help.xml
Get-Counter             C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Diagnostics.dll-Help.xml
Get-WinEvent            C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Diagnostics.dll-Help.xml
Import-Counter          C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Diagnostics.dll-Help.xml
Add-Computer            C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Management.dll-Help.xml
Add-Content             C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Management.dll-Help.xml
Checkpoint-Computer     C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Management.dll-Help.xml
...

Esempio 4: modi diversi per l'input XML

In questo esempio vengono illustrati due modi diversi per inviare xml al Select-Xml cmdlet .

Il primo comando salva una stringa here contenente XML nella $Xml variabile . Per altre informazioni sulle stringhe qui, vedere about_Quoting_Rules.

Select-Xml utilizza il parametro Content per specificare il codice XML nella $Xml variabile .

Il terzo comando è uguale al secondo, ad eccezione del fatto che tt usa un operatore pipeline (|) per inviare il codice XML nella $Xml variabile al Select-Xml cmdlet .

$Xml = @"
<?xml version="1.0" encoding="utf-8"?>
<Book>
  <projects>
    <project name="Book1" date="2009-01-20">
      <editions>
        <edition language="English">En.Book1.com</edition>
        <edition language="German">Ge.Book1.Com</edition>
        <edition language="French">Fr.Book1.com</edition>
        <edition language="Polish">Pl.Book1.com</edition>
      </editions>
    </project>
  </projects>
</Book>
"@

Select-Xml -Content $Xml -XPath "//edition" | foreach {$_.node.InnerXML}

En.Book1.com
Ge.Book1.Com
Fr.Book1.com
Pl.Book1.com

$Xml | Select-Xml -XPath "//edition" | foreach {$_.node.InnerXML}

En.Book1.com
Ge.Book1.Com
Fr.Book1.com
Pl.Book1.com

Esempio 5: Usare lo spazio dei nomi xmlns predefinito

In questo esempio viene illustrato come usare il Select-Xml cmdlet con documenti XML che usano lo spazio dei nomi xmlns predefinito. L'esempio ottiene i titoli dei file dei frammenti di codice creati dall'utente di Windows PowerShell ISE. Per informazioni sui frammenti di codice, vedere New-IseSnippet.

La $SnippetNamespace variabile contiene una tabella hash per lo spazio dei nomi predefinito usato dai file XML del frammento. Il valore della tabella hash è l'URI dello schema XMLNS nell'XML del frammento di codice. Il nome della chiave della tabella hash, snip, è arbitrario. È possibile usare qualsiasi nome non riservato, ma non è possibile usare xmlns.

Il Select-Xml cmdlet ottiene il contenuto dell'elemento Title di ogni frammento di codice. Usa il parametro Path per specificare la directory Snippets e il parametro Namespace per specificare lo spazio dei nomi nella $SnippetNamespace variabile. Il valore del parametro XPath è .snip:Title I risultati vengono inviati tramite pipe al ForEach-Object cmdlet , che ottiene il titolo dal valore della proprietà InnerXml del nodo.

$SnippetNamespace = @{snip = "http://schemas.microsoft.com/PowerShell/Snippets"}

Select-Xml -Path $HOME\Documents\WindowsPowerShell\Snippets -Namespace $SnippetNamespace -XPath "//snip:Title" |
    ForEach-Object {$_.Node.Innerxml}

Parametri

-Content

Specifica una stringa che contiene il file XML da cercare. È anche possibile inviare tramite pipe le stringhe a Select-Xml.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

Specifica i percorsi e i nomi file dei file XML da cercare. A differenza di Path, il valore del parametro LiteralPath viene usato esattamente come viene tipizzato. Nessun carattere viene interpretato come carattere jolly. Se il percorso include caratteri di escape, racchiuderlo tra virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare alcun carattere come sequenze di escape.

Type:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Namespace

Specifica una tabella hash degli spazi dei nomi usati nel file XML. Usa il formato @{<namespaceName> = <namespaceValue>}.

Quando il codice XML usa lo spazio dei nomi predefinito, che inizia con xmlns, usare una chiave arbitraria per il nome dello spazio dei nomi. Non è possibile usare xmlns. Nell'istruzione XPath anteporre a ogni nome di nodo il nome dello spazio dei nomi e i due punti, ad esempio //namespaceName:Node.

Type:Hashtable
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

Specifica il percorso e i nomi file dei file XML da cercare. I caratteri jolly sono consentiti.

Type:String[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-Xml

Specifica uno o più nodi XML.

Un documento XML verrà elaborato come una raccolta di nodi XML. Se si invia tramite pipe un documento XML a Select-Xml, ogni nodo documento verrà cercato separatamente durante l'esecuzione della pipeline.

Type:XmlNode[]
Aliases:Node
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-XPath

Specifica una query di ricerca XPath. Il linguaggio della query distingue tra maiuscole e minuscole. Questo parametro è obbligatorio.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Input

System.String or System.Xml.XmlNode

È possibile inviare tramite pipe un percorso o un nodo XML a questo cmdlet.

Output

SelectXmlInfo

Note

XPath è un linguaggio standard progettato per identificare le parti di un documento XML. Per altre informazioni sul linguaggio XPath, vedere Informazioni di riferimento su XPath e la sezione Filtri di selezione di Selezione eventi.