假设您已使用htmlTreeParse()
获取此XML代码片段:
<div class="right_location">
<h3>Office Locations</h3>
<div class="right_location_in">
<h4>
<a href="/?t=10&L=234&format=XML&p=5406">Akron Office</a>
<h4>
<address>
<address>
</div>
<div class="right_location_in">
<h4>
<a href="/?t=10&L=235&format=XML&p=5406">Cleveland Office</a>
有一些未知数量的办公室,但这个表达式会返回它们。所有人都附加了#34;办公室&#34;
xpathSApply(doc, "//div[@class ='right_location']//a", xmlValue, trim = TRUE)
[1] "Akron Office"
如何排除不需要的&#34; Office&#34;从每一个?我想我不能使用contains()
的否定因为表达式不匹配。也许text()
有能力省略指定的文本?
substring-befor()的答案很好,但我需要让它为每个位置运行,而不仅仅是第一个位置。
答案 0 :(得分:2)
以下XPath将从您的XML返回“Akron”:
substring-before(//div[@class ='right_location']//a[1], ' Office')
备注:强>
a[1]
选择可能多个a
的第一个。substring-before
删除' Office'
。a
通常在XPath 本身之外完成(在XSLT或Python或其他托管语言中,从中调用XPath库进行选择),但是如果你正在使用XPath 2.0 ,你可以考虑(a)使用for expression,(b)使用MathiasMüller建议的tokenize()和“Office”作为分隔符,或者(c)如果只是想在没有“办公室”的情况下找回“阿克伦克利夫兰”,replace()“办公室”什么也没有。