我有一个如下所示的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Destinations>
<Destination name="DEST1" >
<From>AMA*</From>
</Destination>
<Destination name="DEST2" >
<From>AMAZON</From>
</Destination>
<Destination name="DEST3" >
<From>EBAY</From>
</Destination>
<Destination name="DEST4" >
<From>*</From>
</Destination>
</Destinations>
</Configuration>
我想查询并找出与提供的输入匹配的所有目的地。
如果我指定 EBAY,我希望 xpath 返回节点名称 = DEST3 和 DEST4(不关心值)但是如果我指定 AMAZON,它需要返回 DEST1、DEST2 和 DEST4,因为 DEST1 中的 AMA* 支持通配符。
到目前为止,我的 XPath 看起来像这样:
/Destination[(From = '' or From = '*' ) )]/@name
如果指定了输入,我会动态创建 XPATH 表达式并将传入的值放入 字段
除了 From 之外,我的 XML 中还有其他元素。
如果有人可以就此提出建议,我们将不胜感激。
谢谢, 莽卢
最佳答案
以下 XPath 2.0 表达式表示所需的选择:
/*/*/*[From[matches($pPat, replace(., '\*', '.*'))]]
解释:
$pPat 变量包含搜索模式(例如“EBAY”、“AMAZON”等)。
标准 XPath 2.0 函数 matches() 用于将任何 From 元素的值与字符串模式匹配。
任何 From 元素的值都被转换为 XPath 2.0 支持的标准正则表达式。为此,任何出现的 '*'(转义为 "\*",以免被视为特殊字符 '*' 在正则表达式中使用但作为普通字符)被替换为字符串 ".*"
测试:
我使用了以下 XSLT 2.0 转换并验证了上面的 XPath 2.0 表达式按预期选择了元素。要使用它,请将全局参数 $pPat 的值替换为任何所需的值。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes"/>
<xsl:param name="pPat" as="xs:string"
select="'AMAZON'"/>
<xsl:variable name="vsrchResult" as="element()*"
select="/*/*/*[From[matches($pPat, replace(., '\*', '.*'))]]"/>
<xsl:template match="/">
<xsl:copy-of select="$vsrchResult"/>
</xsl:template>
</xsl:stylesheet>
当此转换应用于最初提供的 XML 文档时:
<Configuration>
<Destinations>
<Destination name="DEST1" >
<From>AMA*</From>
</Destination>
<Destination name="DEST2" >
<From>AMAZON</From>
</Destination>
<Destination name="DEST3" >
<From>EBAY</From>
</Destination>
<Destination name="DEST4" >
<From>*</From>
</Destination>
</Destinations>
</Configuration>
生成所需的输出:
<Destination name="DEST1">
<From>AMA*</From>
</Destination><Destination name="DEST2">
<From>AMAZON</From>
</Destination><Destination name="DEST4">
<From>*</From>
</Destination>
关于java - 基于动态正则表达式的 XPath 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/539781/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/