Select-Xml
Hiermee zoekt u tekst in een XML-tekenreeks of -document.
Syntaxis
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>]
Description
Met de cmdlet Select-Xml
kunt u XPath-query's gebruiken om te zoeken naar tekst in XML-tekenreeksen en -documenten.
Voer een XPath-query in en gebruik de parameter Inhoud, Padof xml- parameter om de XML op te geven die moet worden doorzocht.
Voorbeelden
Voorbeeld 1: AliasProperty-knooppunten selecteren
In dit voorbeeld worden de aliaseigenschappen in de Types.ps1xml
. Zie about_Types.ps1xmlvoor meer informatie over dit bestand.
Met de eerste opdracht wordt het pad naar het Types.ps1xml
-bestand opgeslagen in de variabele $Path
.
Met de tweede opdracht wordt het XML-pad opgeslagen naar het AliasProperty-knooppunt in de variabele $XPath
.
De Select-Xml
-cmdlet haalt de AliasProperty--knooppunten op die worden geïdentificeerd door de XPath-instructie uit het Types.ps1xml
-bestand. De opdracht maakt gebruik van een pijplijnoperator (|
) om de AliasProperty--knooppunten naar de Select-Object
cmdlet te verzenden. De parameter ExpandProperty breidt het Node-object uit en retourneert de eigenschappen Name en 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
Het resultaat toont de naam en ReferencedMemberName van elke aliaseigenschap in het Types.ps1xml
-bestand. Er is bijvoorbeeld een eigenschap Count die een alias is van de eigenschap Length.
Voorbeeld 2: Een XML-document invoeren
In dit voorbeeld ziet u hoe u de parameter XML- gebruikt om een XML-document op te geven aan de Select-Xml
-cmdlet.
De cmdlet Get-Content
haalt de inhoud van het Types.ps1xml
bestand op en slaat het op in de variabele $Types
. De [xml]
cast de variabele als een XML-object.
De cmdlet Select-Xml
haalt de MethodName-knooppunten op in het Types.ps1xml
-bestand. De opdracht gebruikt de parameter Xml om de XML-inhoud op te geven in de variabele $Types
en de parameter XPath om het pad naar het knooppunt MethodName op te geven.
[xml]$Types = Get-Content $PSHOME\Types.ps1xml
Select-Xml -Xml $Types -XPath "//MethodName"
Voorbeeld 3: PowerShell Help-bestanden zoeken
In dit voorbeeld ziet u hoe u de Select-Xml
-cmdlet gebruikt om de Help-bestanden van de PowerShell XML-cmdlet te doorzoeken. In dit voorbeeld zoeken we naar de naam van de cmdlet die fungeert als een titel voor elk Help-bestand en het pad naar het Help-bestand.
De $Namespace
-variabele bevat een hash-tabel die de XML-naamruimte vertegenwoordigt die wordt gebruikt voor de Help-bestanden.
De $Path
-variabele bevat het pad naar de Help-bestanden van PowerShell. Als er geen Help-bestanden in dit pad op uw computer staan, gebruikt u de Update-Help
cmdlet om de Help-bestanden te downloaden. Zie about_Updatable_Helpvoor meer informatie over Help bijwerken.
De Select-Xml
cmdlet doorzoekt de XML-bestanden naar cmdlet-namen door Command:Name
element overal in de bestanden te vinden. De resultaten worden opgeslagen in de $Xml
variabele.
Select-Xml
retourneert een SelectXmlInfo-object met een eigenschap Node, een System.Xml.XmlElement-object.
De eigenschap Node heeft een InnerXML--eigenschap die de werkelijke XML bevat die wordt opgehaald.
De variabele $Xml
wordt doorgesluisd naar de Format-Table
-cmdlet. De opdracht Format-Table
maakt gebruik van een berekende eigenschap om de eigenschap Node.InnerXML van elk object in de $Xml
variabele op te halen, de witruimte voor en na de tekst te knippen en weer te geven in de tabel, samen met het Pad naar het bronbestand.
$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
...
Voorbeeld 4: Verschillende manieren om XML in te voeren
In dit voorbeeld ziet u twee verschillende manieren om XML naar de Select-Xml
-cmdlet te verzenden.
Met de eerste opdracht wordt een hier-tekenreeks opgeslagen die XML bevat in de $Xml
variabele. Zie about_Quoting_Rulesvoor meer informatie over hier-tekenreeksen.
Select-Xml
gebruikt de parameter Inhoud om de XML op te geven in de variabele $Xml
.
De derde opdracht is hetzelfde als de tweede, behalve dat tt een pijplijnoperator (|
) gebruikt om de XML in de $Xml
variabele naar de Select-Xml
cmdlet te verzenden.
$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
Voorbeeld 5: De standaard-XMLNS-naamruimte gebruiken
In dit voorbeeld ziet u hoe u de cmdlet Select-Xml
gebruikt met XML-documenten die gebruikmaken van de standaard-XMLNS-naamruimte. In het voorbeeld worden de titels van door de gebruiker gemaakte codefragmentbestanden van Windows PowerShell ISE opgeslagen. Zie New-IseSnippetvoor meer informatie over fragmenten.
De variabele $SnippetNamespace
bevat een hash-tabel voor de standaardnaamruimte die XML-bestanden gebruikt. De hashtabelwaarde is de XMLNS-schema-URI in het XML-fragment-XML. De naam van de hash-tabelsleutel, fragment, is willekeurig. U kunt elke naam gebruiken die niet is gereserveerd, maar u kunt xmlnsniet gebruiken.
De Select-Xml
cmdlet haalt de inhoud van het Titel element van elk fragment op. Hierbij wordt de parameter Path gebruikt om de map Fragmenten en de parameter Naamruimte op te geven om de naamruimte in de $SnippetNamespace
variabele op te geven. De waarde van de parameter XPath is de snip:Title
. De resultaten worden doorgesluisd naar de ForEach-Object
cmdlet, waarmee de titel wordt opgehaald uit de waarde van de eigenschap InnerXml van het knooppunt.
$SnippetNamespace = @{snip = "http://schemas.microsoft.com/PowerShell/Snippets"}
Select-Xml -Path $HOME\Documents\WindowsPowerShell\Snippets -Namespace $SnippetNamespace -XPath "//snip:Title" |
ForEach-Object {$_.Node.InnerXml}
Parameters
-Content
Hiermee geeft u een tekenreeks op die de XML bevat om te zoeken. U kunt ook tekenreeksen naar Select-Xml
.
Type: | String[] |
Position: | Named |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-LiteralPath
Hiermee geeft u de paden en bestandsnamen van de XML-bestanden te zoeken. In tegenstelling tot Pad, wordt de waarde van de parameter LiteralPath exact gebruikt zoals deze is getypt. Er worden geen tekens geïnterpreteerd als jokertekens. Als het pad escapetekens bevat, plaatst u het tussen enkele aanhalingstekens. Enkele aanhalingstekens geven PowerShell aan dat er geen tekens als escapereeksen moeten worden geïnterpreteerd.
Type: | String[] |
Aliassen: | PSPath, LP |
Position: | Named |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-Namespace
Hiermee geeft u een hash-tabel op van de naamruimten die worden gebruikt in de XML. Gebruik de indeling@{<namespaceName> = <namespaceValue>}
.
Wanneer de XML gebruikmaakt van de standaardnaamruimte, die begint met XMLN's, gebruikt u een willekeurige sleutel voor de naamruimtenaam. U kunt geen XMLN's gebruiken. Geef in de XPath-instructie het voorvoegsel van elke knooppuntnaam met de naamruimtenaam en een dubbele punt, zoals //namespaceName:Node
.
Type: | Hashtable |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-Path
Hiermee geeft u het pad en de bestandsnamen van de XML-bestanden te zoeken. Jokertekens zijn toegestaan.
Type: | String[] |
Position: | 1 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | True |
-Xml
Hiermee geeft u een of meer XML-knooppunten op.
Een XML-document wordt verwerkt als een verzameling XML-knooppunten. Als u een XML-document doorsluist naar Select-Xml
, wordt elk documentknooppunt afzonderlijk doorzocht terwijl het via de pijplijn komt.
Type: | XmlNode[] |
Aliassen: | Node |
Position: | 1 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-XPath
Hiermee geeft u een XPath-zoekquery op. De querytaal is hoofdlettergevoelig. Deze parameter is vereist.
Type: | String |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
Invoerwaarden
System.String or System.Xml.XmlNode
U kunt een pad of XML-knooppunt doorsluisen naar deze cmdlet.
Uitvoerwaarden
Notities
XPath is een standaardtaal die is ontworpen om delen van een XML-document te identificeren. Zie XPath Reference en de sectie Selectiefilters van Gebeurtenisselectievoor meer informatie over de XPath-taal.