Q:

can i get the value before or after using sibling with one statement?

Want to get the value before or after using sibling with one statement?
HTML codes
<tr><td width="295" align="right" class="bg1"><div class="barBg2"><div class="info" style="width:60%;"></div></div></td><td width="50" align="center" class="bg1">60%</td><td width="110" align="center" class="bg3">半場控球率</td><td width="50" align="center" class="bg1">40%</td><td width="295" align="left" class="bg1"><div class="barBg"><div class="info" style="width:40%;"></div></div></td><iframe id="tmp_downloadhelper_iframe" style="display: none;"></iframe></tr>

HTML Display output
60%半場控球率40%
Python code
#coding:utf-8
from selenium import webdriver

driver=webdriver.Firefox()
driver.get('url')

texts = driver.find_elements_by_xpath('//*[@id="matchData"]/div[5]//tr//td[preceding-sibling::td="半場控球率" and following-sibling::td="半場控球率"]')

print texts
driver.close()

Expected output
60% 40%

A:

[preceding-sibling::td="半場控球率" and following-sibling::td="半場控球率"] 

predicate means that you want to select element with BOTH preceding AND following sibling with "半場控球率" text content. If you want to select element that has either preceding OR following sibling with text "半場控球率", you need
[preceding-sibling::td="半場控球率" or following-sibling::td="半場控球率"]

Also note that in your case texts  is the list of WebElements. If you want to get text nodes you can try 
texts = [td.text for td in driver.find_elements_by_xpath('//td[(preceding-sibling::td="半場控球率" or following-sibling::td="半場控球率") and not(div)]')]

