从终端到Windows Powershell的Xmlstarlet命令

从终端到Windows Powershell的Xmlstarlet命令,xml,windows,powershell,cmd,xmlstarlet,Xml,Windows,Powershell,Cmd,Xmlstarlet,在我的终端(linux/mac)上,我使用: 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)上,我真的不知道如何修复

在我的终端(linux/mac)上,我使用:

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说使用$而不是@),但是包含有一些错误:

./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"
我甚至试过:

./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“

//ns:div[not(contains(@xml:lang,'意大利语'))]
是一个XPath表达式,其中包含一些不同shell所特有的字符,因此应该使用引号对其进行保护。在bash、Powershell和cmd.exe中使用双引号是有效的:

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中使用它相当高级):

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

//ns:div[not(contains(@xml:lang,'意大利语'))]
是一个XPath表达式,其中包含各种shell所特有的一些字符,因此应使用引号对其进行保护。在bash、Powershell和cmd.exe中使用双引号是有效的:

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中使用它相当高级):


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

在我的终端上“是什么意思?非Windows类型的终端?什么贝壳?“在Windows上”是指在cmd.exe shell还是powershell中?“我知道我需要使用$而不是@”-你为什么这么认为?终端指的是linux/mac。在windows上,我使用powershell。我知道我需要$而不是@,因为powershell让我这么做。。我编辑了我的主要问题。在bash shell中运行初始命令时,我在意外标记“(”附近出现了
bash:syntax错误。您不应该在
//ns:div...
周围加引号吗?我会尽快尝试。我从Java脚本复制了它,所以这是可能的。您是对的,在bash上,我使用“//ns:div[not(contains)”(@xml:lang,'意大利语'))]“类似于我的终端上的”“What does”“表示什么?非Windows类型的终端?什么shell?在cmd.exe shell或powershell中的”“on Windows”“表示什么?”我知道我需要使用$而不是@”-你为什么这么认为?终端我指的是linux/mac。在windows上我使用powershell。我知道我需要$而不是@,因为powershell让我这么做..我编辑了我的主要问题。我得到
bash:意外标记附近的语法错误`(“
在bash shell中运行初始命令时。您不应该在
//ns:div..
周围加引号吗?我会尽快尝试。我从Java脚本复制了它,所以这是可能的。您是对的,在bash上我使用“//ns:div[not(contains(@xml:lang,'意大利语')]”之类的“)