This is a modified XPath expression. It gives the same output. Simplicity is in the eyes of the beholder.
//book[starts-with(author, "We")]/*[not(local-name(.)="price")]/text()
Or, without local-name
, which makes sense only if different namespaces are involved:
//book[starts-with(author, 'We')]/*[self::author or self::title]/text()
//book[starts-with(author, 'We')]/*[not(self::price)]/text()