Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:从复杂的XML文件中检索字段_Xml_Bash_Shell - Fatal编程技术网

Bash:从复杂的XML文件中检索字段

Bash:从复杂的XML文件中检索字段,xml,bash,shell,Xml,Bash,Shell,我尝试使用sed、egrep、awk等shell命令从结构复杂的XML文件中检索一些字段,但失败了 以下是my file.xml文件的结构(使用不同的值重复多次): 星期一 星期二 星期三 星期四 星期五 星期六 星期日 我想要得到输出:Name;霍斯蒂德;FolderName;主机1;旅社2 有什么想法吗 谢谢。如果我们假设您的意思不是(无效)字符串,而是(有效)字符串,当然也假设这两个基准都是有效文档的一部分,这可能类似于: xmlstarlet sel -t -m '//Task' \

我尝试使用sed、egrep、awk等shell命令从结构复杂的XML文件中检索一些字段,但失败了

以下是my file.xml文件的结构(使用不同的值重复多次):


星期一
星期二
星期三
星期四
星期五
星期六
星期日
我想要得到输出:Name;霍斯蒂德;FolderName;主机1;旅社2

有什么想法吗


谢谢。

如果我们假设您的意思不是(无效)字符串
,而是(有效)字符串
,当然也假设这两个基准都是有效文档的一部分,这可能类似于:

xmlstarlet sel -t -m '//Task' \
  -v ./@Name -o ';' \
  -v ./Source/@HostID -o ';' \
  -v ./Destination/@Filename -o ';' \
  -v '//MyID[@id=./Destination/HostID]/@Host1' -o ';' \
  -v '//FID[@id=./Source/HostID]/@Host2' -n \
  <in.xml >out.txt
xmlstarlet sel-t-m'//任务'\
-v./@Name-o';'\
-v./Source/@HostID-o';'\
-v./Destination/@Filename-o';'\
-v'//MyID[@id=。/Destination/HostID]/@Host1'-o';'\
-v'//FID[@id=。/Source/HostID]/@Host2'-n\
顺序文件

使用XML/HTML解析器(xmllint、xmlstarlet…)显示有效的XML文件。请将您想要的输出添加到您的问题中。@Cyrus谢谢,请看editAn XML文件实际上是无效的,除非它有根元素。这里没有显示根元素,也没有显示
任务
如何与
MyID
FID
元素(您打算从中检索其他内容)连接的任何联合父元素。除非源文件不是真正的XML(并且本身无法解析),否则需要确保此处显示的示例有效。此外,
`无效--每个属性都需要有自己的名称,与包含它的元素不同。
xmlstarlet sel -t -m '//Task' \
  -v ./@Name -o ';' \
  -v ./Source/@HostID -o ';' \
  -v ./Destination/@Filename -o ';' \
  -v '//MyID[@id=./Destination/HostID]/@Host1' -o ';' \
  -v '//FID[@id=./Source/HostID]/@Host2' -n \
  <in.xml >out.txt