This means find input tags with an id of project name (so far so good) and then look for child input tags with type text. This isn't what you want because an input tag can't have another one as nested element.
Is there any reason you can't just do //input[@id='projectName']? Ids in HTML are supposed to be unique.
If the HTML is poorly formed and has duplicates, try //input[@id='projectName'][@type='text']
Have you tried creating an html file from the xml, opening it in firefox, and recording the input using the Selenium IDE plugin? Once it is recorded, copy and paste the input line from the IDE as Java into your code. I do agree, this line: