2017-06-21 63 views
1

我无法更新XML文件下面,由于标签属性的xmlns空间(namespace)无法使用xmlstarlet与XML标签属性

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<advertiserFeatures 
xmlns:doc="http://api.homeaway.com/service/v1" 
xmlns="http://api.homeaway.com/domain/v0" etag="33054400302" url="/advertisers/0024/e74510aa-d4f0-4509-8c48-7c101e6f021c/features"> 
<parentEntity href="/advertisers/0024/e74510aa-d4f0-4509-8c48-7c101e6f021c" rel="parentEntity"/> 
<advertiseVasCart>true</advertiseVasCart> 
<agentAssistedCheckout>true</agentAssistedCheckout> 
<dcfEnabled>false</dcfEnabled> 
<enhancedDistribution>false</enhancedDistribution> 
<inserted>2016-02-12T15:38:58.977Z</inserted> 
<travelerFeeEnabled>true</travelerFeeEnabled> 
<updated>2016-02-12T15:38:58.977Z</updated> 

我可以,如果我下面的命令来更新来更新XML文件删除该属性

xmlstarlet ed -u "/advertiserFeatures/advertiseVasCart" -v "false" advertiserFeatures.xml > advertiserFeatures1.xml 

任何想法我错过了什么?

回答

1

您需要绑定的前缀默认命名空间URI,然后使用前缀在XPath来解决相应的命名空间的元素:

xmlstarlet ed -N x="http://api.homeaway.com/domain/v0" \ 
    -u "/x:advertiserFeatures/x:advertiseVasCart" \ 
    -v "false" advertiserFeatures.xml > advertiserFeatures1.xml 

对于进一步阅读:xmlstarlet documentation on 'Namespaces and default namespace'