从终端到 Windows Powershell 的 Xmlstarlet 命令
Xmlstarlet command from terminal to Windows Powershell
在我的终端机上 (linux/mac) 我使用这个:
xmlstarlet ed -N ns=http://www.w3.org/2006/04/ttaf1 -d //ns:div[not(contains(@xml:lang,'Italian'))] "C:\UsersH144708H\Downloads\a.mul.ttml" > "C:\UsersH144708H\Downloads\a.mul.ttml.conv"
On windows (powershell) 我真的不知道如何修复这个命令。我知道我需要使用 $ 而不是 @(因为 powershell 说要使用 $ 而不是 @),但是 contains:
有问题
./xml.exe ed -N ns=http://www.w3.org/2006/04/ttaf1 -d //ns:div[not(contains($xml:lang,'Italian'))] "C:\UsersH144708H\Downloads\a.mul.ttml" > "C:\UsersH144708H\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:\UsersH144708H\Downloads\a.mul.ttml" > "C:\UsersH144708H\Downloads\a.mul.ttml.conv"
但我得到 "failed to load external entity "False""
//ns:div[not(contains(@xml:lang,'Italian'))]
是一个 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:\UsersH144708H\Downloads\a.mul.ttml" > "C:\UsersH144708H\Downloads\a.mul.ttml.conv"
使用 bash 或 Powershell 时,最好使用单引号;对于那些 shell,需要防止 $
的扩展(尽管在 XPath 中使用它是相当高级的):
xmlstarlet ed -N ns=http://www.w3.org/2006/04/ttaf1 -d '//ns:div[not(contains(@xml:lang,"Italian"))]' "C:\UsersH144708H\Downloads\a.mul.ttml" > "C:\UsersH144708H\Downloads\a.mul.ttml.conv"
请注意,内部引号也需要交换。
在我的终端机上 (linux/mac) 我使用这个:
xmlstarlet ed -N ns=http://www.w3.org/2006/04/ttaf1 -d //ns:div[not(contains(@xml:lang,'Italian'))] "C:\UsersH144708H\Downloads\a.mul.ttml" > "C:\UsersH144708H\Downloads\a.mul.ttml.conv"
On windows (powershell) 我真的不知道如何修复这个命令。我知道我需要使用 $ 而不是 @(因为 powershell 说要使用 $ 而不是 @),但是 contains:
有问题./xml.exe ed -N ns=http://www.w3.org/2006/04/ttaf1 -d //ns:div[not(contains($xml:lang,'Italian'))] "C:\UsersH144708H\Downloads\a.mul.ttml" > "C:\UsersH144708H\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:\UsersH144708H\Downloads\a.mul.ttml" > "C:\UsersH144708H\Downloads\a.mul.ttml.conv"
但我得到 "failed to load external entity "False""
//ns:div[not(contains(@xml:lang,'Italian'))]
是一个 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:\UsersH144708H\Downloads\a.mul.ttml" > "C:\UsersH144708H\Downloads\a.mul.ttml.conv"
使用 bash 或 Powershell 时,最好使用单引号;对于那些 shell,需要防止 $
的扩展(尽管在 XPath 中使用它是相当高级的):
xmlstarlet ed -N ns=http://www.w3.org/2006/04/ttaf1 -d '//ns:div[not(contains(@xml:lang,"Italian"))]' "C:\UsersH144708H\Downloads\a.mul.ttml" > "C:\UsersH144708H\Downloads\a.mul.ttml.conv"
请注意,内部引号也需要交换。