2010-11-29 11 views
8

Estoy tratando de usar select-xml para eliminar algunas cosas de una solución de SharePoint. Tengo un directorio de soluciones que contiene una serie de características, y en lugar de abrir cada feature.xml y seleccionar nombres de características a mano y ponerlas en una lista, esperaba hacer el equivalente usando powershell y select-xml.PowerShell select-xml xpath no parece funcionar

Mi intento fue algo como esto:

ls -recurse -filter feature.xml | select-xml "/Feature" 

y no tengo nada, así que traté de esto:

ls -recurse -filter feature.xml | select-xml "//*" 

que parecía hacer lo que tenía que hacer. Obtuve una lista de cada nodo XML en todos los archivos feature.xml en mi solución.

Probé expresiones XPath como "// Feature" y "Feature", ninguna de las cuales obtuvo ningún resultado.

Me parece que mis expresiones XPath son correctas, pero el comportamiento de select-xml es un poco desconcertante. Alguien sabe por qué esto podría estar pasando?

+3

Si su "feature.xml" sigue [esto] (http://msdn.microsoft.com/en- us/library/ms475601.aspx) documentación, debe usar un prefijo vinculado al URI del espacio de nombres 'http: // schemas.microsoft.com/sharepoint /' para esa prueba QName. De lo contrario: '// * [local-name() = 'Feature']' –

+0

@Alejandro: la característica xml solo tiene un atributo xmlns = "http://schemas.microsoft.com/sharepoint/". No soy un experto, pero ¿eso no configura el espacio de nombres predeterminado? Pensé que si se configuraba el espacio de nombres predeterminado, XPath no necesitaría una especificación adicional para él. –

+4

No. Es una pregunta frecuente: una prueba de QName sin prefijo selecciona el elemento en el URI nulo (o vacío) del espacio de nombres. –

Respuesta

8

Tal vez el problema es con el espacio de nombres xml. Intente usar el -namespace para obtener la consulta xpath correcta.

Pruebe esto quitando los xmlns de un archivo feature.xml y ejecutando su comando.

+0

+ de acuerdo ... iba a publicar un comentario preguntando por el espacio de nombres del xml –

8

Incluso un espacio de nombres "por defecto" tiene que especificar para seleccionar en XML por ejemplo:

$ns = @{dns = 'http://schemas.microsoft.com/sharepoint/'} 
ls . -r feature.xml | Select-Xml '//dns:Feature' -Namespace $ns 
+0

Si uso el espacio de nombres predeterminado 'xmlns', esto es problemático porque powershell indica que uno está reservado. –

+1

Incluso los elementos en el espacio de nombres predeterminado deben calificarse en su expresión XPath. –

Cuestiones relacionadas