The new xml functions runs more effeciently than the old OPENXML, that is why you suggest this? If I have a file I need to load, I was use
SET @xml = 'location of xml'
In your example does the brackets  specify that there are more than one value or is it the cross apply? This would work whether there would be 1,2 and 3 or more authors, correct? So in your example I would do this:
Insert into tblBook
SELECT a.c.value('(BookNumber/text())', 'int')
, b.c.value('(@name)', 'varchar(30)')
FROM @xml.nodes('/xml/Document/FileDetail') AS a(c)
CROSS APPLY a.c.nodes('BookAuthorLoop/Author') AS b(c)
I would then I have one row of record containing
BookNumber Book Author
1234 John Doe, Jane Doe
When I query for the book number in the table?
Thanks for taking the time to help.