2010-11-29 14 views
8

select-xmlを使用して、SharePointソリューションからいくつかの問題を根絶しようとしています。私はいくつかの機能を含むソリューションディレクトリを持っていて、それぞれのfeature.xmlを開き、機能の名前を手で選択してリストに入れるのではなく、powershellselect-xmlを使用して同等の処理を行うことを望んでいました。PowerShellのselect-xml xpathが動作しないようです。

私の試みは、このような何か行ってきました:

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

を、私は何も持っていないので、私はこれを試してみました:それが行うことになっていた何をするように見えた

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

。私のソリューションのすべてのfeature.xmlファイルにあるXMLノードのリストを得ました。

"// Feature"や "Feature"などのXPath式を試しましたが、いずれも結果がありませんでした。

私のXPath式は正しいと思われますが、select-xmlの動作はちょっと驚くべきことです。なぜこれが起こっているのかも知れませんか?

+3

あなた「は、Feature.xmlは」[この](http://msdn.microsoft.com/en-を以下の場合us/library/ms475601.aspx)のドキュメントでは、そのQNameテストのために、名前空間URI「http:// schemas.microsoft.com/sharepoint /」にバインドされたプレフィックスを使用する必要があります。それ以外の場合: '// * [local-name()= 'Feature'] ' –

+0

@Alejandro:機能xmlはxmlns =" http://schemas.microsoft.com/sharepoint/ "属性を持っています。私は専門家ではありませんが、デフォルトの名前空間を設定していませんか?私は、デフォルトの名前空間が設定されていれば、XPathに追加の仕様は必要ないと思っていました。 –

+4

いいえ、これはFAQです:プレフィックスのないQNameテストは、ヌル(または空の)名前空間URIの下の要素を選択します。 –

答えて

8

xml名前空間に問題がある可能性があります。 -namespaceを使用して正しいxpathクエリを取得してください。

これをテストするには、feature.xmlファイルからxmlnsを削除し、コマンドを実行します。

+0

+ agree ... xmlのネームスペースについて質問するコメントを投稿しようとしていた –

8

でも「デフォルト」の名前空間は、例えば、XMLを選択するために指定する必要があります。

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

デフォルトのネームスペース 'xmlns'を使用すると、powershellが予約されていることを示すため問題があります。 –

+1

デフォルトネームスペースの偶数要素もXPath式で修飾する必要があります。 –

関連する問題