Select-Xml
Najde text v řetězci NEBO dokumentu XML.
Syntaxe
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
Rutina Select-Xml
umožňuje pomocí dotazů XPath vyhledávat text v řetězcích XML a dokumentech.
Zadejte dotaz XPath a pomocí Content, Pathnebo Xml parametr zadejte XML, který se má prohledávat.
Příklady
Příklad 1: Výběr uzlů AliasProperty
Tento příklad získá vlastnosti aliasu v Types.ps1xml
. Informace o tomto souboru naleznete v tématu about_Types.ps1xml.
První příkaz uloží cestu k souboru Types.ps1xml
v proměnné $Path
.
Druhý příkaz uloží cestu XML do uzlu AliasProperty v proměnné $XPath
.
Rutina Select-Xml
získá AliasProperty uzly identifikované příkazem XPath ze souboru Types.ps1xml
. Příkaz pomocí operátoru kanálu (|
) odešle AliasProperty uzly do rutiny Select-Object
. Parametr ExpandProperty rozbalí objekt Node Node a vrátí jeho Name a ReferencedMemberName vlastnosti.
$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
Výsledek zobrazuje název a ReferencedMemberName každé vlastnosti aliasu v souboru Types.ps1xml
. Existuje například vlastnost Count, která je aliasem vlastnosti Length.
Příklad 2: Zadání dokumentu XML
Tento příklad ukazuje, jak pomocí parametru XML poskytnout dokumentu XML rutině Select-Xml
.
Rutina Get-Content
získá obsah souboru Types.ps1xml
a uloží ho do proměnné $Types
.
[xml]
přetypuje proměnnou jako objekt XML.
Rutina Select-Xml
získá uzly MethodName v souboru Types.ps1xml
. Příkaz pomocí parametru Xml určuje obsah XML v proměnné $Types
a parametr XPath určit cestu k uzlu MethodName.
[xml]$Types = Get-Content $Pshome\Types.ps1xml
Select-Xml -Xml $Types -XPath "//MethodName"
Příklad 3: Hledání souborů nápovědy PowerShellu
Tento příklad ukazuje, jak pomocí rutiny Select-Xml
prohledat soubory nápovědy pro rutiny založené na JAZYCE PowerShellu. V tomto příkladu vyhledáme název rutiny, který slouží jako název pro každý soubor nápovědy a cestu k souboru nápovědy.
Proměnná $Namespace
obsahuje tabulku hash, která představuje obor názvů XML, který se používá pro soubory nápovědy.
Proměnná $Path
obsahuje cestu k souborům nápovědy PowerShellu. Pokud v tomto počítači nejsou žádné soubory nápovědy, stáhněte soubory nápovědy pomocí rutiny Update-Help
. Další informace o aktualizovatelné nápovědě naleznete v tématu about_Updatable_Help.
Rutina Select-Xml
prohledává názvy rutin XML vyhledáním Command:Name
elementu kdekoli v souborech. Výsledky jsou uloženy v proměnné $Xml
.
Select-Xml
vrátí SelectXmlInfo objekt, který má vlastnost Node, což je System.XmlElement objektu.
Vlastnost Node má vlastnost InnerXML, která obsahuje skutečný kód XML, který se načte.
Proměnná $Xml
se předá do rutiny Format-Table
. Příkaz Format-Table
používá počítanou vlastnost k získání vlastnosti Node.InnerXML každého objektu v proměnné $Xml
, oříznout prázdné znaky před a za textem a zobrazit ho v tabulce spolu s Path ke zdrojovému souboru.
$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
...
Příklad 4: Různé způsoby zadávání XML
Tento příklad ukazuje dva různé způsoby odeslání XML do Select-Xml
rutiny.
První příkaz uloží řetězec sem, který obsahuje XML v proměnné $Xml
. Další informace o zde-řetězce naleznete v tématu about_Quoting_Rules.
Select-Xml
používá parametr Content k určení XML v proměnné $Xml
.
Třetí příkaz je stejný jako druhý, s tím rozdílem, že tt používá operátor kanálu (|
) k odeslání XML v proměnné $Xml
do Select-Xml
rutiny.
$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
Příklad 5: Použití výchozího oboru názvů xmlns
Tento příklad ukazuje, jak používat rutinu Select-Xml
s dokumenty XML, které používají výchozí obor názvů xmlns. Příklad získá názvy souborů fragmentů kódu vytvořeného uživatelem prostředí Windows PowerShell ISE. Informace o fragmentech kódu najdete v tématu New-IseSnippet.
Proměnná $SnippetNamespace
obsahuje tabulku hash výchozího oboru názvů, který fragmentuje soubory XML. Hodnota hash tabulky je identifikátor URI schématu XMLNS v xml fragmentu kódu. Název klíče tabulky hash, výnip, je libovolný. Můžete použít libovolný název, který není rezervován, ale nemůžete použít xmlns.
Rutina Select-Xml
získá obsah elementu Title každého fragmentu kódu. Pomocí parametru Path určuje adresář Fragments a parametr Namespace k určení oboru názvů v proměnné $SnippetNamespace
. Hodnota parametru XPath je snip:Title
. Výsledky se předávají do rutiny ForEach-Object
, která získá název z hodnoty InnerXml vlastnosti uzlu.
$SnippetNamespace = @{snip = "http://schemas.microsoft.com/PowerShell/Snippets"}
Select-Xml -Path $HOME\Documents\WindowsPowerShell\Snippets -Namespace $SnippetNamespace -XPath "//snip:Title" |
ForEach-Object {$_.Node.InnerXml}
Parametry
-Content
Určuje řetězec, který obsahuje XML pro vyhledávání. Řetězce můžete také pipetovat do Select-Xml
.
Typ: | String[] |
Position: | Named |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | True |
Přijmout zástupné znaky: | False |
-LiteralPath
Určuje cesty a názvy souborů XML, které se mají prohledávat. Na rozdíl od Pathse hodnota parametru LiteralPath používá přesně tak, jak je zadán. Žádné znaky nejsou interpretovány jako zástupné znaky. Pokud cesta obsahuje řídicí znaky, uzavřete ji do jednoduchých uvozovek. Jednoduché uvozovky říkají PowerShellu, aby nepřekládaly žádné znaky jako řídicí sekvence.
Typ: | String[] |
Aliasy: | PSPath, LP |
Position: | Named |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | True |
Přijmout zástupné znaky: | False |
-Namespace
Určuje hashovací tabulku oborů názvů použitých v jazyce XML. Použijte formát@{<namespaceName> = <namespaceValue>}
.
Pokud XML používá výchozí obor názvů, který začíná xmlns, použijte libovolný klíč pro název oboru názvů. Nelze použít xmlns. V příkazu XPath předpona každý název uzlu názvem oboru názvů a dvojtečka, například //namespaceName:Node
.
Typ: | Hashtable |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-Path
Určuje cestu a názvy souborů XML, které se mají prohledávat. Jsou povoleny zástupné znaky.
Typ: | String[] |
Position: | 1 |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | True |
Přijmout zástupné znaky: | True |
-Xml
Určuje jeden nebo více uzlů XML.
Dokument XML bude zpracován jako kolekce uzlů XML. Pokud předáte dokument XML do Select-Xml
, bude každý uzel dokumentu prohledána samostatně, protože prochází kanálem.
Typ: | XmlNode[] |
Aliasy: | Node |
Position: | 1 |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | True |
Přijmout zástupné znaky: | False |
-XPath
Určuje vyhledávací dotaz XPath. Dotazovací jazyk rozlišují malá a velká písmena. Tento parametr je povinný.
Typ: | String |
Position: | 0 |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
Vstupy
System.String or System.Xml.XmlNode
K této rutině můžete přeskakovat cestu nebo uzel XML.
Výstupy
Poznámky
XPath je standardní jazyk, který je navržený k identifikaci částí dokumentu XML. Další informace o jazyce XPath naleznete v tématu referenční XPath a oddíl Filtry výběru výběr událostí.