我有一个xml文件test.gpx
:
cat test.gpx
<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1">
<trk>
<name>Name 1</name>
<desc>Description 1</desc>
</trk>
<trk>
<name>Name 2</name>
<desc>Description 2</desc>
</trk>
</gpx>
字符串
xmlstartlet无法成功执行尝试在此文件中插入子节点:
xmlstarlet edit --subnode "/gpx/trk" --type elem -n "new" -v "Hello World!" test.gpx
<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1">
<trk>
<name>Name 1</name>
<desc>Description 1</desc>
</trk>
<trk>
<name>Name 2</name>
<desc>Description 2</desc>
</trk>
</gpx>
型
而在第一个gpx
元素中只有一个属性,它可以工作:
xmlstarlet edit --subnode "/gpx/trk" --type elem -n "new" -v "Hello World!" test.gpx
<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<trk>
<name>Name 1</name>
<desc>Description 1</desc>
<new>Hello World!</new>
</trk>
<trk>
<name>Name 2</name>
<desc>Description 2</desc>
<new>Hello World!</new>
</trk>
</gpx>
型
因此,我的问题是:我如何才能成功地处理原始文件,在它的第一个gpx
元素中有多个属性?
版本信息:
xmlstarlet --version
1.6.1
compiled against libxml2 2.9.10, linked with 20913
compiled against libxslt 1.1.34, linked with 10134
型
在Ubuntu 22.04上。
1条答案
按热度按时间2w2cym1i1#
你要处理的属性不仅仅是普通的属性-they are namespaces,而且必须相应地考虑。因为你在第一个文件(而不是第二个)中有一个默认的名称空间,你可以用两种方法之一来处理它。
长,明确的方式:
字符串
或较短的:
型
任何一个都应该给予您预期的输出。