본관은 정선(旌善). 자는 민장(民章). 태자소부(太子少傅) 문임간(文林幹)의 아들이다.
문종 때 과거에 급제하여 정변진부장(靜邊鎭副將)이 되어 여진과 싸워 공을 세웠고, 변방의 백성들이 매우 굶주리므로 이를 진휼(賑恤)하였다.
숙종 초 예부원외랑(禮部員外郎)을 거쳐 기거주(起居注)·병부시랑(兵部侍郎)을 역임하였으며, 1099년(숙종 4)과 1104년 두 차례에 걸쳐서 요(遼)나라에 사신으로 다녀왔다. 1105년 소부감 지어사대사 겸 태자좌서자(少府監知御史臺事兼太子左庶子)에 제수되었으며, 1106년(예종 1) 우산기상시(右散騎常侍)가 되었다.
1107년 윤관(尹瓘)이 여진을 정벌할 때 좌군병마사(左軍兵馬使)로서 종군하여 여진의 석성(石城)을 깨뜨리고 복주성(福州城)을 쌓았는데 이 공적으로 이부상서(吏部尙書)에 제수되었다. 1108년 여진이 9성 중의 하나인 웅주성(雄州城)을 침략하므로 오연총(吳延寵)의 지휘하에 김준(金晙)·왕자지(王字之)와 같이 군사 1만 명으로 수륙(水陸)을 동시에 진군하여 적을 물리쳤다.
여진이 9성을 돌려줄 것을 애원하므로 1109년 행영병마별감(行營兵馬別監) 최홍정(崔弘正)과 더불어 앞으로는 고려를 절대 침략하지 말 것이며, 해마다 조공을 바친다는 조건으로 9성을 돌려주었다. 1110년 수사공(守司空), 다음 해 참지정사(參知政事)에 이르렀으나 치사(致仕)하였다.
성품은 청렴, 정직하고 관후하였으며 관직에 있을 때는 절도를 지켜 칭송을 받았다. 시호는 장경(章敬)이다.