デフォルト名前空間付きのXMLを指定するXPath

検索対象XML

<A>
	<B xmlns:p="http://xxx.xxx.xxx">
		<C>
			<D xmlns="http://yyy.yyy.yyy">
				<E1>aaaaaa</E1>
				<E2>bbbbbb</E2>
				<E3>
					<F1>ccccc</F1>
				</E3>
				<E4>
					<F1>dddddd</F1>
				</E4>
				<E5>eeeee</E5>
			</D>
		</C>
	</B>
</A>

これの[E5]を取りたい

ソラで適当に書くとこう
/A/B/C/D/E5

しかしデフォルト名前空間(プリフィックスなしの名前空間)が存在する為に検索できない。

苦心してこれ。
//*[namespace-uri()='http://yyy.yyy.yyy'][5]/text()

醜いので変形。
↓ まずは適当に
○ //*[contains(concat(" ",normalize-space(@E5)," "), " ")]
↓ お、いけた
○ //*[namespace-uri()='http://yyy.yyy.yyy']/*[contains(concat(" ",normalize-space(@F)," "), " ")]
↓ まぁなんでも当たりってやつ
○ //*[namespace-uri()='http://yyy.yyy.yyy']/*[contains(text(), "eeeee")]
↓ ふーん?
× //*[namespace-uri()='http://yyy.yyy.yyy']/*[contains(concat(" ",normalize-space(text())," "), " e ")]
↓ ありゃダメ
× //*[namespace-uri()='http://yyy.yyy.yyy']/*[start-with(text(),"e")]
↓ えー
○ //*[namespace-uri()='http://yyy.yyy.yyy']/*[contains(text(),"e")]
↓ お
○ //*[namespace-uri()='http://yyy.yyy.yyy']/*[contains(.,"e")]
↓ テキスト指定じゃちょっとね
○ //*[namespace-uri()='http://yyy.yyy.yyy']/*[contains(local-name(),"E5")]/text()
javascript-xpathだとxmldocumentに対して使えない…
○ //*:E5[namespace-uri()='http://yyy.yyy.yyy']/text()
↓ ajaxsltが関数に対応してない…xpath解析すると戻ってこない…
○ //*:E5/

:の意味がわからん…