- - PR -
XPath式内の名前空間及び拡張関数を同時に解決する方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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した時にエラーになるようです。 ご教授お願いいたします。 |
|
投稿日時: 2007-08-17 15:10
その CustomContext というクラスは XmlNamespaceManager を継承してたりしませんか?
であれば、CustomContext のインスタンス1つだけで用が済む気がします。 |
|
投稿日時: 2007-08-17 19:07
CustomContextはXsltContextから派生したものです。
ソースは、Microsoftのサンプルソースを元に作っています。 http://support.microsoft.com/kb/324899/ja XPath式の名前空間をmtdbに統一して 始めのmanagerによるSetContextをやめ、 後のcntxtによるSetContextのみをやってみましたが、 うまくいきませんでした、、、 |
1