Sdílet prostřednictvím


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

SelectXmlInfo

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í.