正在bash/perl
你很可能会libxml
。 libxml 不支持 XPath 2.0。关于 XPath/XSLT 2.0 与 libxml/libxslt 和 Perl 的 SO 有很多问题。
XPath 1.0 有多种(我不得不承认只有一小部分)字符串函数 http://www.w3.org/TR/xpath/#section-String-Functions你可以尝试将它们堆叠在一起。我尝试了一些,但我也不喜欢结果,也没有成功涵盖所有可能的情况。你会有“丑陋”的结构,例如:
...
or
(contains(@var, ',xyz{') and
contains(substring-before(substring-after(@var, ',xyz{'), '}'), '5A') and
(contains(substring-before(substring-after(@var, ',xyz{'), '}'), ',5A,') or
starts-with(substring-after(@var, ',xyz{'), '5A,') or
starts-with(substring-after(@var, ',xyz{'), '5A}') or
substring-after(substring-before(substring-after(@var, ',xyz{'), '}'), ',5A') = ''))
or
...
然后你就会意识到substring-*
函数从第一次出现的匹配字符串开始工作,您需要更多层and
s and or
处理像你这样的情况:
<case var="data3A,xyz{9},xyz{5A,5B,5C}">24</case>
哪里有多个xyz{
并且您需要的并不知道是第一个。
我认为在这种情况下,您忘记了自己有一个 XML,而只是执行 Perl 的优点并将其视为文本。尽管我非常喜欢用于 XML 处理和数据提取的 XML 感知工具,但使用专为其设计的语言进行正则表达式和字符串操作可能会更好。