2

.net4.0を使用しています

次のxpathを有効に書き換えるにはどうすればよいですか?

//Menu[fn:lower-case(./Link) = 'xyxysyx']

このエラーが発生します:

名前空間マネージャーまたはXsltContextが必要です。このクエリには、プレフィックス、変数、またはユーザー定義関数があります。

追加する必要のある名前空間をXmlNamespaceManagerでこの問題を解決する方法がわかりません...

私がこのようにそれをするならば、それは働きます:

 //Menu[./Link = 'xyxysyx']

しかし、私はそれを小文字で比較する必要があります。

これが組み合わされるコンテキストは次のとおりです。

 IEnumerable<System.Xml.Linq.XElement> menus = xml.Root.XPathSelectElements(xpath, namespaceManager); 

XmlNamespaceManagerであるXPathSelectElementssecon引数に渡すことができることに注意してください

編集 ここに翻訳機能を使った作業例があります:

//Menu[translate(./Link, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'yz']
4

1 に答える 1

5

lower-case()は標準のXPath2.0関数であり、XSLT2.0プロセッサでのみ実装されます

コードを「現状のまま」実行するには、XSLT2.0プロセッサが必要です。.NETで使用するために開発された2つの有名なXSLT2.0プロセッサがあります。

  1. Saxon 9.x for .NET(Saxon.NET)
  2. XQSharp

注意してください

XSLTプロセッサは、接頭辞のないすべての関数名に正しいデフォルトの名前空間を使用するため、名前空間の接頭辞は標準のXPath2.0関数の名前から省略できます。

したがって、次のように記述します。

lower-case(./Link)

それ以外の:

fn:lower-case(./Link)
于 2012-09-13T13:32:37.850 に答える