日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为XPath自定义函数(因为XPath1.0的函数非常有限)[附源代码下载]

發布時間:2024/4/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为XPath自定义函数(因为XPath1.0的函数非常有限)[附源代码下载] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

想要一個正則表達式的匹配函數,但是XPath1.0中間沒有,
只好自己擴展一個,在網上搜了一下,有一篇文章不錯,
http://www.microsoft.com/china/MSDN/library/data/xml/AddingCustomFunctionstoXpath.mspx?mfr=true
該文章定義了一個split,一個replace,不過就是沒有match,
只好在它的基礎上,擴展一下

仔細觀察一下代碼,發現想要擴展一個函數很簡單,只要修改這幾段就好了:

1:CustomContext.cs

//?Function?to?resolve?references?to?my?custom?functions.
????????public?override?IXsltContextFunction?ResolveFunction(string?prefix,
?????
string?name,?XPathResultType[]?ArgTypes)
????????
{
????????????XPathRegExExtensionFunction?func?
=?null;
????????????
//?Create?an?instance?of?appropriate?extension?function?class.
????????????switch?(name)
????????????
{
????????????????
case?"Match":
????????????????????
//?Usage?
????????????????????
//?myFunctions:Matches(string?source,?string?Regex_pattern)?returns?Boolean
????????????????????func?=?new?XPathRegExExtensionFunction("Match",?2,?2,?new
????????XPathResultType[]?
{XPathResultType.String,?XPathResultType.String}
????????,?XPathResultType.Boolean?);
????????????????????
break;
????????????????
case?"Split":
????????????????????
//?Usage?
????????????????????
//?myFunctions:Split(string?source,?string?Regex_pattern,?int?n)?returns?string
????????????????????func?=?new?XPathRegExExtensionFunction("Split",?3,?3,?new
????????XPathResultType[]?
{XPathResultType.String,?XPathResultType.String,?
XPathResultType.Number}
,?XPathResultType.String);
????????????????????
break;
????????????????
case?"Replace":
????????????????????
//?Usage
????????????????????
//?myFunctions:Replace(string?source,?string?Regex_pattern,?string?replacement_string)?returns?string
????????????????????func?=?new?XPathRegExExtensionFunction("Replace",?3,?3,?new
????????XPathResultType[]?
{XPathResultType.String,?XPathResultType.String,?
XPathResultType.String}
,?XPathResultType.String);
????????????????????
break;
????????????}

????????????
return?func;
????????}

?

2: XPathRegExExtensionFunction.cs

//?This?method?is?invoked?at?run?time?to?execute?the?user?defined?function.
????????public?object?Invoke(XsltContext?xsltContext,?object[]?args,
?????XPathNavigator?docContext)
????????
{
????????????Regex?r;
????????????
string?str?=?null;
????????????
//?The?two?custom?XPath?extension?functions
????????????switch?(m_FunctionName)
????????????
{
????????????????
case?"Match":
????????????????????r?
=?new?Regex(args[1].ToString());
????????????????????MatchCollection?m?
=?r.Matches(args[0].ToString());
????????????????????
if?(m.Count?==?0)
????????????????????
{
????????????????????????
return?false;
????????????????????}

????????????????????
else
????????????????????
{
????????????????????????
return?true;
????????????????????}

????????????????????
break;

????????????????
case?"Split":
????????????????????r?
=?new?Regex(args[1].ToString());
????????????????????
string[]?s1?=?r.Split(args[0].ToString());
????????????????????
int?n?=?Convert.ToInt32(args[2]);
????????????????????
if?(s1.Length?<?n)
????????????????????????str?
=?"";
????????????????????
else
????????????????????????str?
=?s1[n?-?1];
????????????????????
break;
????????????????
case?"Replace":
????????????????????r?
=?new?Regex(args[1].ToString());
????????????????????
string?s2?=?r.Replace(args[0].ToString(),?args[2].ToString());
????????????????????str?
=?s2;
????????????????????
break;
????????????}

????????????
return?(object)str;
????????}

?

另外一個文件XPathExtensionVariable.cs其實和函數擴展沒有太多的關系,那是設置參數的。

這連個文件修改好了之后,就可以調用了:

query?=?navigator.Compile("xdUtil:Match(9,'\\d')");
????????????CustomContext?cntxt?
=?new?CustomContext();
????????????
//?Add?a?namespace?definition?for?myFunctions?prefix.
????????????cntxt.AddNamespace("xdUtil",?"http://myXPathExtensionFunctions");
????????????query.SetContext(cntxt);
????????????Evaluate(query,?navigator);

當然,要是支持XPath2.0 就好了,XPath2.0這些函數都是內置支持的,可惜目前好像還不支持。

全部的代碼在這里:
/Files/cleo/XPathExtFunction.rar

總結

以上是生活随笔為你收集整理的为XPath自定义函数(因为XPath1.0的函数非常有限)[附源代码下载]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人毛片18女人 | 亚洲成人av电影 | 国产精品探花一区二区三区 | 色成人亚洲| 一眉道姑 | 日韩精品极品视频免费观看 | 波多野结衣av一区二区全免费观看 | 超碰在线免费观看97 | 综合图区亚洲 | 在线麻豆视频 | 久久久久久免费毛片精品 | 韩国黄色精品 | 日本视频免费在线 | 亚洲成人中文字幕 | ktv做爰视频一区二区 | 欧美乱人伦 | 黑人精品无码一区二区三区AV | 97在线观看视频免费 | 日韩大片免费在线观看 | 欧美xxxx69 | 精品国产乱码久久久人妻 | 国产高清一区二区三区四区 | 波多野结衣乳巨码无在线 | 狠狠2020| 草莓视频成人在线 | 夜久久| 国产黄色片免费看 | 欧美三级韩国三级日本三斤在线观看 | 日韩有码第一页 | 成人在线视频免费观看 | 亚洲AV无码国产日韩久久 | 亚洲经典久久 | 人妻在卧室被老板疯狂进入 | 性一级视频 | 久久日本视频 | www.精品| 欧美色噜噜 | 欧美激情视频一区 | 国产白丝喷水 | 日本高清不卡二区 | 国产美女网站视频 | 日韩福利小视频 | 91美女片黄在线观看游戏 | 免费看片黄色 | 免费荫蒂添的好舒服视频 | 人人妻人人澡人人爽精品欧美一区 | 国产欧美视频一区二区 | 色综合久久久久久久 | 免费视频中文字幕 | 毛片久久久 | 99国产精 | 中国三级黄色 | 国产熟女高潮一区二区三区 | 国精品一区二区 | 亚洲一个色 | 国产一区二区视频播放 | 久久激情综合 | 97自拍网| 午夜影院在线观看视频 | 国内精品99 | 中文字幕一区二区三区免费 | 青青插 | 亚洲精品高潮久久久久久久 | 我要操av | cao在线视频 | 手机av在线不卡 | 亚洲国产一区二区a毛片 | 中文字幕无码精品亚洲35 | 深爱激情丁香 | 人人澡人人爽 | 最新超碰 | 少妇野外性xx老女人野外性xx | 亚洲最大福利视频网 | 成人污在线 | 中文人妻熟妇乱又伦精品 | 爱爱一区 | 高清无码一区二区在线观看吞精 | 日韩中文字幕视频 | 日本一区电影 | 国产欧美在线观看 | 中文字幕在线观看网站 | 韩日午夜在线资源一区二区 | 国产人妻人伦精品1国产 | 无套内谢老熟女 | 午夜精品网站 | 亚洲av日韩精品久久久久久久 | 丝袜天堂 | 中文字幕网伦射乱中文 | 色婷婷aⅴ一区二区三区 | 日日夜夜天天干 | 国产美女引诱水电工 | 精品福利片 | 日本欧美视频 | 亚洲综合小说 | 亚洲av片在线观看 | 韩国短剧在线观看 | 三级网站在线 | 神马影院午夜伦理 | 亚洲影视在线 |