- PR -

XPath式内の名前空間及び拡張関数を同時に解決する方法

1
投稿者投稿内容
未記入
会議室デビュー日: 2007/08/17
投稿数: 2
投稿日時: 2007-08-17 13:28
Visual Basic .Net 2003 で開発中です。

名前空間と拡張関数を含むXPath式をコンパイルし、
SetContextでそれぞれ解決しようとしていますが、
うまくいきません。

'ファイルを読み込む
Dim xmldoc As New XPathDocument("C:\\\\mtdb.xml")
Dim nav As XPathNavigator = xmldoc.CreateNavigator

Dim manager As XmlNamespaceManager = New XmlNamespaceManager(nav.NameTable)
manager.AddNamespace("mtdb", "http://tempuri.org/Test")

'val1には、実数表示の数値が入ります
Dim XPath As String = "/mtdb:試験/mtdb:項目[nokmtdb:子項目[myFuncs:toDouble(string(.)) >= " & val1 & "]] "
Dim expr1 As XPathExpression = nav.Compile(XPath)
expr1.SetContext(manager)

'拡張関数の登録
Dim varList As New XsltArgumentList
Dim cntxt As New CustomContext(New NameTable, varList)
cntxt.AddNamespace("myFuncs", "http://myXPathExtensionFunctions")
expr1.SetContext(cntxt)

Dim iter As XPathNodeIterator = nav.Select(expr1)
Do While iter.MoveNext
System.Diagnostics.Debug.WriteLine("子項目 : " & iter.Current.Value)
Loop

どうも、SetContextを2回やっているため、
先に登録した内容が消えてしまい、
MoveNextした時にエラーになるようです。

ご教授お願いいたします。
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2007-08-17 15:10
その CustomContext というクラスは XmlNamespaceManager を継承してたりしませんか?
であれば、CustomContext のインスタンス1つだけで用が済む気がします。
未記入
会議室デビュー日: 2007/08/17
投稿数: 2
投稿日時: 2007-08-17 19:07
CustomContextはXsltContextから派生したものです。

ソースは、Microsoftのサンプルソースを元に作っています。
http://support.microsoft.com/kb/324899/ja

XPath式の名前空間をmtdbに統一して
始めのmanagerによるSetContextをやめ、
後のcntxtによるSetContextのみをやってみましたが、
うまくいきませんでした、、、
1

スキルアップ/キャリアアップ(JOB@IT)