首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从终端到的Xmlstarlet命令

从终端到的Xmlstarlet命令
EN

Stack Overflow用户
提问于 2017-10-03 14:25:52
回答 1查看 1.1K关注 0票数 0

在我的终端(linux/mac)上,我使用以下内容:

代码语言:javascript
复制
xmlstarlet ed -N ns=http://www.w3.org/2006/04/ttaf1 -d //ns:div[not(contains(@xml:lang,'Italian'))] "C:\Users\1H144708H\Downloads\a.mul.ttml" > "C:\Users\1H144708H\Downloads\a.mul.ttml.conv"

在windows (powershell)上,我真的不知道如何修复这个命令。我知道我需要使用$而不是@(因为powershell说使用$而不是@),但是包含有问题:

代码语言:javascript
复制
./xml.exe ed -N ns=http://www.w3.org/2006/04/ttaf1 -d //ns:div[not(contains($xml:lang,'Italian'))] "C:\Users\1H144708H\Downloads\a.mul.ttml" > "C:\Users\1H144708H\Downloads\a.mul.ttml.conv"

我甚至试过这个:

代码语言:javascript
复制
./xml.exe ed -N ns=http://www.w3.org/2006/04/ttaf1 -d //ns:div[not($xml:lang -contains'Italian')] "C:\Users\1H144708H\Downloads\a.mul.ttml" > "C:\Users\1H144708H\Downloads\a.mul.ttml.conv"

但我被“加载外部实体失败”“False”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-03 17:54:01

//ns:div[not(contains(@xml:lang,'Italian'))]是一个XPath表达式,它包含一些对各种shell都很特殊的字符,因此您应该用引号来保护它。使用双引号在bash、Powershell和cmd.exe中有效:

代码语言:javascript
复制
xmlstarlet ed -N ns=http://www.w3.org/2006/04/ttaf1 -d "//ns:div[not(contains(@xml:lang,'Italian'))]" "C:\Users\1H144708H\Downloads\a.mul.ttml" > "C:\Users\1H144708H\Downloads\a.mul.ttml.conv"

在使用bash或Powershell时,最好使用单引号;对于这些shell,需要使用单引号来防止$的扩展(尽管在XPath中使用这种方法相当先进):

代码语言:javascript
复制
xmlstarlet ed -N ns=http://www.w3.org/2006/04/ttaf1 -d '//ns:div[not(contains(@xml:lang,"Italian"))]' "C:\Users\1H144708H\Downloads\a.mul.ttml" > "C:\Users\1H144708H\Downloads\a.mul.ttml.conv"

注意,内部引号也需要交换。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46546960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档