¿Cómo aplanar un archivo XML en un conjunto de expresiones xpath?

Considera que tengo el siguiente archivo XML de ejemplo:

<ns1:create xmlns:ns1='http://predic8.com/wsdl/material/ArticleService/1/'>
   <article xmlns:ns1='http://predic8.com/material/1/'>
      <name xmlns:ns1='http://predic8.com/material/1/'>foo</name>
      <description xmlns:ns1='http://predic8.com/material/1/'>bar</description>
      <price xmlns:ns1='http://predic8.com/common/1/'>
         <amount xmlns:ns1='http://predic8.com/common/1/'>00.00</amount>
         <currency xmlns:ns1='http://predic8.com/common/1/'>USD</currency>
      </price>
      <id xmlns:ns1='http://predic8.com/material/1/'>1</id>
   </article>
</ns1:create>

¿Cuál sería la mejor manera (más eficiente) de aplanar esto en un conjunto de expresiones xpath? También tenga en cuenta: quiero ignorar cualquier espacio de nombres e información de atributos. (Si es necesario, esto también podría hacerse como un paso de preprocesamiento).

Así que quiero obtener como salida:

/create/article/name
/create/article/description
/create/article/price/amount
/create/article/price/currency
/create/article/id

Estoy implementando en Java.

EDITAR: PS, también podría necesitar esto para funcionar en el caso de que no haya datos en el nodo de texto, por lo que, por ejemplo, lo siguiente debería generar la misma salida que la anterior:

<ns1:create xmlns:ns1='http://predic8.com/wsdl/material/ArticleService/1/'>
  <article xmlns:ns1='http://predic8.com/material/1/'>
    <name />
    <description />
    <price xmlns:ns1='http://predic8.com/common/1/'>
      <amount />
      <currency xmlns:ns1='http://predic8.com/common/1/'></currency>
    </price>
    <id xmlns:ns1='http://predic8.com/material/1/'></id>
  </article>
</ns1:create>

Respuestas a la pregunta(2)

Su respuesta a la pregunta