Select-Xml
Hiermee vindt u tekst in een XML-tekenreeks of -document.
Syntax
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 Select-Xml
cmdlet 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, Pad of XML om de XML op te geven die moet worden doorzocht.
Voorbeelden
Voorbeeld 1: AliasProperty-knooppunten selecteren
In dit voorbeeld worden de aliaseigenschappen in de opgeslagen Types.ps1xml
. Zie about_Types.ps1xml voor meer informatie over dit bestand.
Met de eerste opdracht wordt het pad naar het Types.ps1xml
bestand in de $Path
variabele opgeslagen.
Met de tweede opdracht wordt het XML-pad opgeslagen naar het knooppunt AliasProperty in de $XPath
variabele.
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. Met de parameter ExpandProperty wordt het Node-object uitgebreid en worden de eigenschappen Name en ReferencedMemberName geretourneerd.
$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
In het resultaat worden de naam en verwijzing naarmembernaam van elke aliaseigenschap in het Types.ps1xml
bestand weergegeven. 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 XML-parameter gebruikt om een XML-document op te geven aan de Select-Xml
cmdlet.
De Get-Content
cmdlet haalt de inhoud van het Types.ps1xml
bestand op en slaat deze op in de $Types
variabele. De [xml]
cast de variabele als een XML-object.
De Select-Xml
cmdlet haalt de MethodName-knooppunten in het Types.ps1xml
bestand op. De opdracht gebruikt de xml-parameter om de XML-inhoud in de $Types
variabele op te geven en de XPath-parameter 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: Help-bestanden voor PowerShell Search
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 wordt gezocht naar de naam van de cmdlet die als titel fungeert voor elk Help-bestand en het pad naar het Help-bestand.
De $Namespace
variabele bevat een hashtabel die de XML-naamruimte vertegenwoordigt die wordt gebruikt voor de Help-bestanden.
De $Path
variabele bevat het pad naar de PowerShell-Help-bestanden. Als er geen Help-bestanden in dit pad op uw computer zijn, gebruikt u de Update-Help
cmdlet om de Help-bestanden te downloaden. Zie about_Updatable_Help voor meer informatie over Help die kan worden bijgewerkt.
De Select-Xml
cmdlet zoekt in de XML-bestanden naar cmdlet-namen door het element ergens in de bestanden te zoeken Command:Name
. De resultaten worden opgeslagen in de $Xml
variabele. Select-Xml
retourneert een SelectXmlInfo-object met de eigenschap Node . Dit is een System.Xml. XmlElement-object .
De eigenschap Node heeft een InnerXML-eigenschap die de werkelijke XML bevat die wordt opgehaald.
De $Xml
variabele wordt doorgesluisd naar de Format-Table
cmdlet. De Format-Table
opdracht 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 here-tekenreeks opgeslagen die XML bevat in de $Xml
variabele. Zie about_Quoting_Rules voor meer informatie over here-tekenreeksen.
Select-Xml
gebruikt de parameter Content om de XML in de $Xml
variabele op te geven.
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 standaardnaamruimte xmlns gebruiken
In dit voorbeeld ziet u hoe u de Select-Xml
cmdlet gebruikt met XML-documenten die gebruikmaken van de standaardnaamruimte xmlns. In het voorbeeld worden de titels van Windows PowerShell door de GEBRUIKER gemaakte fragmentbestanden van ISE. Zie New-IseSnippet voor meer informatie over fragmenten.
De $SnippetNamespace
variabele bevat een hashtabel voor de standaardnaamruimte die xml-bestanden met fragmenten gebruiken. De waarde van de hashtabel is de SCHEMA-URI van XMLNS in het XML-fragment. De naam van de hashtabelsleutel, het knipsel, is willekeurig. U kunt elke naam gebruiken die niet is gereserveerd, maar u kunt geen xmln gebruiken.
De Select-Xml
cmdlet haalt de inhoud van het titelelement van elk fragment op. De parameter Path wordt 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 XPath-parameter is de snip:Title
. De resultaten worden doorgesluisd naar de ForEach-Object
cmdlet, die de titel ophaalt 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 waarnaar moet worden gezocht. U kunt tekenreeksen ook doorsluizen naar Select-Xml
.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-LiteralPath
Hiermee geeft u de paden en bestandsnamen van de XML-bestanden te zoeken. In tegenstelling tot Path wordt de waarde van de parameter LiteralPath precies gebruikt zoals deze is getypt. Geen tekens worden geïnterpreteerd als jokertekens. Als het pad escape-tekens bevat, plaatst u het tussen enkele aanhalingstekens. Enkele aanhalingstekens geven PowerShell aan dat geen tekens als escape-reeksen worden geïnterpreteerd.
Type: | String[] |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | 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 de standaardnaamruimte gebruikt, die begint met xmlns, gebruikt u een willekeurige sleutel voor de naamruimtenaam. U kunt geen xmln's gebruiken. In de XPath-instructie voorafvoegt u elke knooppuntnaam met de naamruimtenaam en een dubbele punt, zoals //namespaceName:Node
.
Type: | Hashtable |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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 |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | True |
-Xml
Hiermee geeft u een of meer XML-knooppunten.
Een XML-document wordt verwerkt als een verzameling XML-knooppunten. Als u een XML-document doorspekt naar Select-Xml
, wordt elk documentknooppunt afzonderlijk doorzocht wanneer het via de pijplijn komt.
Type: | XmlNode[] |
Aliases: | Node |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-XPath
Hiermee geeft u een XPath-zoekquery op. De querytaal is hoofdlettergevoelig. Deze parameter is vereist.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Invoerwaarden
System.String or System.Xml.XmlNode
U kunt een pad of XML-knooppunt doorspezen naar deze cmdlet.
Uitvoerwaarden
Notities
XPath is een standaardtaal die is ontworpen om delen van een XML-document te identificeren. Zie XPath-verwijzing en de sectie Selectiefilters van Gebeurtenisselectie voor meer informatie over de XPath-taal.