【发布时间】:2017-09-09 20:53:49
【问题描述】:
我尝试使用 sed、egrep、awk 等 shell 命令从结构复杂的 XML 文件中检索一些字段,但失败了。
这是我的文件 file.xml 的结构(它以不同的值重复了很多次):
<Task ID="186155128" Name="Partner: test" Active="1" NextEID="14" AR="0">
<Schedules>
<Schedule OnlyUntilFirstSuccess="0" FailIfNoSuccessInSched="0" RunEvenIfNotif="0">
<Days>
<DayOfWeek>Monday</DayOfWeek>
<DayOfWeek>Tuesday</DayOfWeek>
<DayOfWeek>Wednesday</DayOfWeek>
<DayOfWeek>Thursday</DayOfWeek>
<DayOfWeek>Friday</DayOfWeek>
<DayOfWeek>Saturday</DayOfWeek>
<DayOfWeek>Sunday</DayOfWeek>
</Days>
<Frequency>
<Interval StartTime="00:00" EndTime="23:59" EveryMinutes="15"/>
</Frequency>
</Schedule>
</Schedules>
<Destination HostID="1027635962" Type="AS2" UseDefPartner="1" UseDefRetryCount="1" UseDefRetryTimeoutSecs="1" Filename="[OrigName]" RequestMDN="1" RequestSigned="0" />
<Source HostID="165429109" Type="siLock" FolderID="" FolderType="-1" FolderName="home/test" FileMask="*.*" DeleteOrig="1" NewFilesOnly="0" SearchSubdirs="0" Unzip="0" />
</Task>
<MyID="1027635962" Host1="myhost" DefPartnerURL="https://site.site.com" Password="!s!f7xtVc=="/>
<FID="165429109" DotNET="1" Name="mytest" Host2="testy.com" Port="443" />
我想得到输出:Name;HostID;FolderName;Host1;Host2
有什么想法吗?
谢谢。
【问题讨论】:
-
使用 XML/HTML 解析器(xmllint、xmlstarlet ...)。
-
显示一个有效的 XML 文件。请将您想要的输出添加到您的问题中。
-
@Cyrus 谢谢,请看编辑
-
除非有根元素,否则 XML 文件实际上是无效的。这里没有显示根元素,也没有显示
Task如何与您打算从中检索其他内容的MyID或FID元素连接的任何联合父元素。除非您的源文件真的不是 XML(并且本身无法解析),否则您需要确保此处显示的示例是有效的。 -
另外,
<MyId="..."/>` 无效——每个属性都需要有自己的名称,与包含它的元素不同。