2010-11-29 5 views
8

J'essaie d'utiliser select-xml pour déraciner un certain nombre de choses à partir d'une solution SharePoint. J'ai un répertoire de solution qui contient un certain nombre de fonctionnalités, et plutôt que d'ouvrir chaque feature.xml et de sélectionner les noms des fonctionnalités à la main et de les mettre dans une liste, j'espérais faire l'équivalent en utilisant powershell et select-xml.PowerShell select-xml xpath ne semble pas fonctionner

Ma tentative a quelque chose comme ceci:

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

et je me suis rien, j'ai donc essayé ceci:

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

qui semblait faire ce qu'il était censé faire. J'ai une liste de tous les nœuds XML dans tous les fichiers feature.xml de ma solution.

J'ai essayé des expressions XPath telles que "// Feature" et "Feature", mais aucune n'a obtenu de résultat.

Il me semble que mes expressions XPath sont correctes, mais le comportement de select-xml est un peu déroutant. Quelqu'un sait pourquoi cela pourrait se produire?

+3

Si votre "feature.xml" suit [ce] (http://msdn.microsoft.com/en- us/library/ms475601.aspx), vous devez utiliser un préfixe lié à l'URI de l'espace de noms 'http: // schemas.microsoft.com/sharepoint /' pour ce test QName. Sinon: '// * [nom-local() = 'Fonction']' –

+0

@Alejandro: la fonction xml a juste un attribut xmlns = "http://schemas.microsoft.com/sharepoint/". Je ne suis pas un expert, mais cela ne définit-il pas l'espace de noms par défaut? Je pensais que si l'espace de noms par défaut était défini, XPath n'aurait pas besoin d'une spécification supplémentaire pour cela. –

+4

Non. C'est une FAQ: un test QName sans préfixe sélectionne un élément sous un URI d'espace de noms vide (ou vide). –

Répondre

8

Le problème est peut-être lié à l'espace de noms XML. Essayez d'utiliser le -namespace pour obtenir la requête xpath correcte.

Testez cela en supprimant les xmlns d'un fichier feature.xml et en exécutant votre commande.

+0

+ convenu ... j'allais poster un commentaire demandant sur l'espace de noms du xml –

8

Même un espace de noms "par défaut" doit être spécifiée pour sélectionner-Xml par exemple:

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

Si j'utilise l'espace de noms par défaut 'xmlns', c'est problématique parce que powershell indique que l'un est réservé. –

+1

Même les éléments de l'espace de nom par défaut doivent être qualifiés dans votre expression XPath. –

Questions connexes