web-dev-qa-db-ja.com

名前空間プレフィックスを持つxmlからのxpath式

Xmlパス名前空間プレフィックスが設定されていると、次のxpath式を機能させることができませんでした。

/bk:BookStore/bk:Books/bk:Book[text()='Time Machine']

XMLは次のとおりです。

<BookStore xmlns:bk="http://www.bookstore.com/book#">
  <bk:Books>
    <bk:Book id="1">Time Machine></bk:Book>
  </bk:Books>
</bk:BookStore>
14
Chaitanya

ホスト言語に関する詳細情報なし(XPath式を評価しようとします)有用な推奨事項を提供することはできません

一般に、名前空間を名前空間マネージャーに「登録」する必要があります。これにより、登録された名前空間にプレフィックスも関連付けられます。次に、このNamespaceManagerオブジェクトをXPath評価メソッドの引数として使用して、その特定のプレフィックスがプレフィックスとして付いた名前を含むXPath式をこのメソッドの引数として指定できます。

回避策

/*/*[name()='bk:Books']/*[name()='bk:Book' and text()='Time Machine']
16

または、不要なプレフィックスなしで、さらに優れた(そしてよりポータブルな):

/*/*[local-name()='Books'] ... and so on

- 関数 local-name プレフィックスは無視されます。プレフィックスは、コメント投稿者が正しく述べているように、変更される可能性があります。

29
Ivivi Vavava