您正在处理的属性不仅仅是普通的属性 - 它们是命名空间并且必须相应地考虑在内。由于您的第一个(但不是第二个)文件中有默认名称空间,因此您可以通过以下两种方式之一来处理它。
长而明确的方式:
xmlstarlet ed -N x=http://www.topografix.com/GPX/1/1 --subnode "/x:gpx/x:trk" --type elem -n "new" -v "Hello World!" test.gpx
或更短的:
xmlstarlet ed --subnode "/_:gpx/_:trk" --type elem -n "new" -v "Hello World!" test.gpx
任何一个都应该给你预期的输出。