You can lose one cross apply and further simplify the query like this:
SELECT
o.value('(del_Nr/text())[1]', 'VARCHAR(10)') as PONbr,
o.value('(del_Third_Nr/text())[1]', 'VARCHAR(10)') AS NCubeID,
o.value('(Line/Product_Code/text())[1]', 'VARCHAR(30)') AS InvtID,
o.value('(Line/Product_Quantity/text())[1]', 'INT') AS QtyOrd
FROM #xNESP_XmlImportPOData
CROSS APPLY xml_data.nodes('/message/body/shipmentorder/orderheader/data') a(o);
-- Itzik Ben-Gan 2001