Select-Xml
Busca texto en un documento o una cadena XML.
Sintaxis
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
El Select-Xml
cmdlet le permite usar consultas XPath para buscar texto en cadenas y documentos XML.
Escriba una consulta XPath y use el parámetro Content, Path o Xml para especificar el XML que se va a buscar.
Ejemplos
Ejemplo 1: Seleccionar nodos AliasProperty
En este ejemplo se obtienen las propiedades de Types.ps1xml
alias de . Para obtener información sobre este archivo, vea about_Types.ps1xml.
El primer comando guarda la ruta de acceso al Types.ps1xml
archivo en la $Path
variable .
El segundo comando guarda la ruta de acceso XML al nodo AliasProperty en la $XPath
variable .
El Select-Xml
cmdlet obtiene los nodos AliasProperty identificados por la instrucción XPath del Types.ps1xml
archivo. El comando usa un operador de canalización (|
) para enviar los nodos AliasProperty al Select-Object
cmdlet . El parámetro ExpandProperty expande el objeto Node y devuelve sus propiedades Name y 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
El resultado muestra name y ReferencedMemberName de cada propiedad de alias del Types.ps1xml
archivo. Por ejemplo, hay una propiedad Count que es un alias de la propiedad Length .
Ejemplo 2: Entrada de un documento XML
En este ejemplo se muestra cómo usar el parámetro XML para proporcionar un documento XML al Select-Xml
cmdlet .
El Get-Content
cmdlet obtiene el contenido del Types.ps1xml
archivo y lo guarda en la $Types
variable . [xml]
Convierte la variable como un objeto XML.
El Select-Xml
cmdlet obtiene los nodos MethodName del Types.ps1xml
archivo. El comando usa el parámetro Xml para especificar el contenido XML en la $Types
variable y el parámetro XPath para especificar la ruta de acceso al nodo MethodName .
[xml]$Types = Get-Content $Pshome\Types.ps1xml
Select-Xml -Xml $Types -XPath "//MethodName"
Ejemplo 3: Buscar archivos de ayuda de PowerShell
En este ejemplo se muestra cómo usar el Select-Xml
cmdlet para buscar en los archivos de ayuda del cmdlet basado en XML de PowerShell. En este ejemplo se mostrará cómo buscar el nombre del cmdlet que se utiliza como título para cada archivo de ayuda y la ruta de acceso al archivo de ayuda.
La $Namespace
variable contiene una tabla hash que representa el espacio de nombres XML que se usa para los archivos de ayuda.
La $Path
variable contiene la ruta de acceso a los archivos de ayuda de PowerShell. Si no hay archivos de ayuda en esta ruta de acceso en el equipo, use el Update-Help
cmdlet para descargar los archivos de ayuda. Para obtener más información sobre la Ayuda actualizable, consulte about_Updatable_Help.
El Select-Xml
cmdlet busca en los archivos XML los nombres de cmdlet mediante la búsqueda Command:Name
del elemento en cualquier parte de los archivos. Los resultados se almacenan en la $Xml
variable . Select-Xml
devuelve un objeto SelectXmlInfo que tiene una propiedad Node , que es un objeto System.Xml.XmlElement .
La propiedad Node tiene una propiedad InnerXML que contiene el XML real que se recupera.
La $Xml
variable se canaliza al Format-Table
cmdlet . El Format-Table
comando usa una propiedad calculada para obtener la propiedad Node.InnerXML de cada objeto de la $Xml
variable, recortar el espacio en blanco antes y después del texto y mostrarlo en la tabla, junto con la ruta de acceso al archivo de origen.
$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
...
Ejemplo 4: Diferentes formas de introducir XML
En este ejemplo se muestran dos maneras diferentes de enviar XML al Select-Xml
cmdlet .
El primer comando guarda una cadena aquí que contiene XML en la $Xml
variable . Para obtener más información sobre las cadenas aquí, consulte about_Quoting_Rules.
Select-Xml
usa el parámetro Content para especificar el XML en la $Xml
variable .
El tercer comando es el mismo que el segundo, salvo que tt usa un operador de canalización (|
) para enviar el XML en la $Xml
variable 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
Ejemplo 5: Usar el espacio de nombres xmlns predeterminado
En este ejemplo se muestra cómo usar el Select-Xml
cmdlet con documentos XML que usan el espacio de nombres xmlns predeterminado. En el ejemplo se obtienen los títulos de los archivos de fragmentos de código creados por el usuario de Windows PowerShell ISE. Para obtener información sobre los fragmentos de código, consulte New-IseSnippet.
La $SnippetNamespace
variable contiene una tabla hash para el espacio de nombres predeterminado que usan los archivos XML de fragmento de código. El valor de la tabla hash es el URI de esquema XMLNS del XML de fragmentos de código. El nombre de clave de la tabla hash, snip, es arbitrario. Puede usar cualquier nombre que no esté reservado, pero no puede usar xmlns.
El Select-Xml
cmdlet obtiene el contenido del elemento Title de cada fragmento de código. Usa el parámetro Path para especificar el directorio Snippets y el parámetro Namespace para especificar el espacio de nombres en la $SnippetNamespace
variable. El valor del parámetro XPath es .snip:Title
Los resultados se canalizan al ForEach-Object
cmdlet , que obtiene el título del valor de la propiedad 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}
Parámetros
-Content
Especifica una cadena que contiene el XML que se debe buscar. También puede canalizar cadenas a Select-Xml
.
Tipo: | String[] |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-LiteralPath
Especifica las rutas de acceso y los nombres de los archivos XML en los que se debe realizar la búsqueda. A diferencia de Path, el valor del parámetro LiteralPath se usa exactamente como se escribe. Ninguno de los caracteres se interpreta como caracteres comodín. Si la ruta de acceso contiene caracteres de escape, escríbalos entre comillas simples. Las comillas simples indican a PowerShell que no interprete ningún carácter como secuencias de escape.
Tipo: | String[] |
Alias: | PSPath, LP |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-Namespace
Especifica una tabla hash de los espacios de nombres utilizados en el XML. Use el formato @{<namespaceName> = <namespaceValue>}
.
Cuando el XML usa el espacio de nombres predeterminado, que comienza con xmlns, use una clave arbitraria para el nombre del espacio de nombres. No se pueden usar xmlns. En la instrucción XPath, asigne un prefijo a cada nombre de nodo con el nombre del espacio de nombres y dos puntos, como //namespaceName:Node
.
Tipo: | Hashtable |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Path
Especifica la ruta de acceso y los nombres de los archivos XML en los que se va a realizar la búsqueda. Se permite el uso de caracteres comodín.
Tipo: | String[] |
Posición: | 1 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | True |
-Xml
Especifica uno o varios nodos XML.
Un documento XML se procesará como una colección de nodos XML. Si canaliza un documento XML a Select-Xml
, cada nodo de documento se buscará por separado, ya que pasa por la canalización.
Tipo: | XmlNode[] |
Alias: | Node |
Posición: | 1 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-XPath
Especifica una consulta de búsqueda XPath. El lenguaje de consulta distingue mayúsculas de minúsculas. Este parámetro es obligatorio.
Tipo: | String |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
Entradas
System.String or System.Xml.XmlNode
Puede canalizar una ruta de acceso o un nodo XML a este cmdlet.
Salidas
Notas
XPath es un lenguaje estándar diseñado para identificar las partes de un documento XML. Para obtener más información sobre el lenguaje XPath, vea Referencia de XPath y la sección Filtros de selección.