【发布时间】:2016-03-21 11:59:11
【问题描述】:
我需要为特定内容解析给定的 XML 文件。不幸的是,我的系统上只有没有 xpath 的 xmllint(并且我不允许安装/更新任何其他来源)。
XML 将包含:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<CreateIncidentResponse xmlns="http://schemas.hp.com/SM/7" xmlns:cmn="http://schemas.hp.com/SM/7/Common" xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" message="Success" returnCode="0" schemaRevisionDate="2016-02-16" schemaRevisionLevel="2" status="SUCCESS" xsi:schemaLocation="http://schemas.hp.com/SM/7 /Incident.xsd">
<model>
<keys>
<IncidentID type="String">IM0832268</IncidentID>
</keys>
<instance recordid="IM0832268 - Paul test 3 incident via soap" uniquequery="number="IM0832268"">
<IncidentID type="String">IM0832268</IncidentID>
<Category type="String">request for change</Category>
<OpenTime type="DateTime">2016-03-18T16:06:28+00:00</OpenTime>
<OpenedBy type="String">Harlass, Alexander</OpenedBy>
<Priority type="String">4</Priority>
<Urgency type="String">medium</Urgency>
<UpdatedTime type="DateTime">2016-03-18T16:06:28+00:00</UpdatedTime>
<AssignmentGroup type="String">TS3-AOS</AssignmentGroup>
<Description type="Array">
<Description type="String">RH test incident description via soap row 1</Description>
<Description type="String">RH test incident description via soap row 2</Description>
</Description>
<Contact type="String">Harlass, Rudolf</Contact>
<Title type="String">Paul test 3 incident via soap</Title>
<TicketOwner type="String">INTEGRATION.OVO</TicketOwner>
<UpdatedBy type="String">INTEGRATION.OVO</UpdatedBy>
<Status type="String">Open</Status>
<Area type="String">it products</Area>
<Subarea type="String">utilization</Subarea>
<ProblemType type="String">request for change</ProblemType>
<Impact type="String">low</Impact>
<Service type="String">PI Automation and Orchestration Service</Service>
<VIP type="Boolean">false</VIP>
<TargetResolutionDate type="DateTime">2016-03-25T15:00:00+00:00</TargetResolutionDate>
<SOD type="String">OML</SOD>
<SourceId type="String">4711</SourceId>
<UserIncident type="Boolean">false</UserIncident>
<AlertId type="String">4712</AlertId>
<MonitoredId type="String">MI4713</MonitoredId>
</instance>
</model>
<messages>
<cmn:message type="String">Audit Record successfully recorded and added.</cmn:message>
</messages>
</CreateIncidentResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
最后我需要这样的输出:
Create SUCCESS
Messages:
Audit Record successfully recorded and added.
Incident ID: IM0832268
Status: Open
Severity: 4
Brief Description: RH test incident description via soap row 1
Opened by: integration.ovo
Opened time: March 20, 2016 11:54:08 PM CET
我知道如何创建一个包含输出的字符串,但不幸的是我对 sed 或类似工具不太熟悉。
任何有关如何从 xml 中提取所需字符串的帮助将不胜感激。
提前致谢
【问题讨论】:
-
你的系统上有xsltproc吗?
-
(如果您需要快速破解,请关注此评论。这不是一个长期解决方案。)即使您无法安装任何东西,您通常也可以编译并复制二进制文件(和依赖项)到那个系统,在您拥有写入权限的路径上。最坏的情况,
/tmp是可读写的。您可以尝试将新版本的xmllint复制到该路径并从那里执行。 -
也许awk.info/?doc/tools/xmlparse.html 可以提供帮助。不确定是否需要
gawk或者您的系统是否有它,但大多数 gawk 特定代码都可以重写为普通 awk 而不会有太多麻烦。祝你好运。