DOS/Windows xmlstarlet 使用字符串而不是 xml 文件

DOS/Windows xmlstarlet usage with a String instead of a xml file

xmlstarlet 可以与字符串而不是 xml 文件一起使用吗? 例如:

xmlstarlet sel -t -v "/*" "<pathlist><path>C:\file.txt</path></pathlist>"

而不是

xmlstarlet sel -t -v "/*" pathlist.xml

或者我还能用字符串实现什么? 当我回显字符串并将其通过管道传输到 xmlstarlet 时,它不起作用:

SET "_var=^<pathlist^>^<path^>C:\file.txt^</path^> ^</pathlist^>"
& 
call echo %^_var% | xmlstarlet sel -t -v "//*"

给出错误:

< was unexpected at this time.
-:1.1: Document is empty

^
-:1.1: Start tag expected, '<' not found

^

这实际上是一项简单的任务,但我无法让它工作。我只想在 One-Liner 中向 xmlstarlet 回显一个字符串。

cmd.exe 语法很奇怪,以下使用 set /p 的技巧似乎有效:

C:\tmp><nul (set /p ="<pathlist><path>C:\file.txt</path></pathlist>") | xmlstarlet sel -t -v /*
C:\file.txt

/* 可能会扩展 glob(取决于您拥有的文件)。不幸的是,无法从 cmd.exe 引用它(扩展由 libc 代表 xmlstarlet 执行),因此在这种情况下您将不得不重写 XPath,例如/pathlist 相反。

来源:https://groups.google.com/d/msg/alt.msdos.batch.nt/RNug94fXI5s/BdgYJfNmXysJ via http://www.netikka.net/tsneti/info/tscmd047.htm


我没有找到关于为什么转义 <> 不适用于 | 重定向的解释??

C:\tmp> echo ^<^>
<>
C:\tmp> echo ^<^> | more
> was unexpected at this time.