Compartir a través de


Select-Xml

Busca texto en una cadena o documento 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 cmdlet Select-Xml permite usar consultas XPath para buscar texto en cadenas y documentos XML. Escriba una consulta XPath y use el de contenido, ruta de accesoo parámetro xml para especificar el XML que se va a buscar.

Ejemplos

Ejemplo 1: Seleccionar nodos AliasProperty

En este ejemplo se obtienen las propiedades de alias del Types.ps1xml. Para obtener información sobre este archivo, vea about_Types.ps1xml.

El primer comando guarda la ruta de acceso al archivo Types.ps1xml en la variable $Path.

El segundo comando guarda la ruta de acceso XML al nodo AliasProperty en la variable $XPath.

El cmdlet Select-Xml obtiene los nodos AliasProperty identificados por la instrucción XPath del archivo Types.ps1xml. El comando usa un operador de canalización (|) para enviar los nodos AliasProperty al cmdlet Select-Object. El parámetro ExpandProperty expande el objeto node de 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 el Name y ReferencedMemberName de cada propiedad de alias del archivo Types.ps1xml. Por ejemplo, hay una propiedad count que es un alias de la propiedad Length de.

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 cmdlet Select-Xml.

El cmdlet Get-Content obtiene el contenido del archivo Types.ps1xml y lo guarda en la variable $Types. El [xml] convierte la variable como un objeto XML.

El cmdlet Select-Xml obtiene los nodos MethodName en el archivo Types.ps1xml. El comando usa el parámetro xml para especificar el contenido XML en la variable $Types 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 cmdlet Select-Xml para buscar en los archivos de ayuda del cmdlet basado en XML de PowerShell. En este ejemplo, buscaremos el nombre del cmdlet que actúa como título para cada archivo de ayuda y la ruta de acceso al archivo de ayuda.

La variable $Namespace contiene una tabla hash que representa el espacio de nombres XML que se usa para los archivos de ayuda.

La variable $Path 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 cmdlet Update-Help para descargar los archivos de ayuda. Para obtener más información sobre la Ayuda actualizable, consulte about_Updatable_Help.

El cmdlet Select-Xml busca en los archivos XML los nombres de cmdlet mediante la búsqueda de Command:Name elemento en cualquier parte de los archivos. Los resultados se almacenan en la variable $Xml. 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 variable $Xml se canaliza al cmdlet Format-Table. El comando Format-Table usa una propiedad calculada para obtener la propiedad Node.InnerXML de cada objeto de la variable $Xml, 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 cmdlet Select-Xml.

El primer comando guarda una cadena aquí que contiene XML en la variable $Xml. Para obtener más información sobre las cadenas aquí, vea about_Quoting_Rules.

Select-Xml usa el parámetro Content para especificar el XML en la variable $Xml.

El tercer comando es el mismo que el segundo, salvo que tt usa un operador de canalización (|) para enviar el XML en la variable $Xml al cmdlet Select-Xml.

$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 cmdlet Select-Xml con documentos XML que usan el espacio de nombres xmlns predeterminado. En el ejemplo se obtienen los títulos de los archivos de fragmento de código creados por el usuario de Windows PowerShell ISE. Para obtener información sobre los fragmentos de código, vea New-IseSnippet.

La variable $SnippetNamespace 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 del esquema XMLNS del fragmento de código XML. 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 cmdlet Select-Xml 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 variable $SnippetNamespace. El valor del parámetro XPath es el snip:Title. Los resultados se canalizan al cmdlet ForEach-Object, 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 va a 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 archivo de los archivos XML que se van a buscar. A diferencia de Path, el valor del parámetro LiteralPath se usa exactamente como se escribe. No se interpreta ningún carácter como caracteres comodín. Si la ruta de acceso incluye caracteres de escape, escríbala 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 usados 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 archivo de los archivos XML que se van a buscar. Se permiten 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 partes de un documento XML. Para obtener más información sobre el lenguaje XPath, vea de referencia de XPath y la sección Filtros de selección de selección de eventos.