我对XSL转换还比较陌生。
我的输入XML如下:
<?xml version="1.0" encoding="UTF-8"?>
<PublishVS_PPWO xmlns="http://www.ibm.com/maximo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creationDateTime="2019-11-15T11:55:15+11:00" transLanguage="EN" baseLanguage="EN" messageID="2887862.1573779314727427868" maximoVersion="7 6 20170418-0100 V7608-61" event="1">
<VS_PPWOSet>
<WORKORDER action="Replace">
<SITEID>SITE51</SITEID>
<STATUS changed="1" maxvalue="COMP">COMP</STATUS>
<STATUSDATE changed="1">2019-11-15T11:55:06+11:00</STATUSDATE>
<WONUM>PW1024</WONUM>
<FAILUREREPORT>
<FAILURECODE>NDT</FAILURECODE>
<FAILUREREPORTID>1704590</FAILUREREPORTID>
<TYPE maxvalue="PROBLEM">PROBLEM</TYPE>
</FAILUREREPORT>
<FAILUREREPORT>
<FAILURECODE>LINE</FAILURECODE>
<FAILUREREPORTID>1704591</FAILUREREPORTID>
<TYPE maxvalue="CAUSE">CAUSE</TYPE>
</FAILUREREPORT>
<FAILUREREPORT>
<FAILURECODE>PASS</FAILURECODE>
<FAILUREREPORTID>1704592</FAILUREREPORTID>
<TYPE maxvalue="REMEDY">REMEDY</TYPE>
</FAILUREREPORT>
</WORKORDER>
</VS_PPWOSet>
</PublishVS_PPWO>
XSLT如下:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:mea="http://www.ibm.com/maximo">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="mea:PublishVS_PPWO"/>
</xsl:template>
<xsl:template match="mea:PublishVS_PPWO">
<xsl:apply-templates select="mea:VS_PPWOSet"/>
</xsl:template>
<xsl:template match="mea:VS_PPWOSet">
<xsl:apply-templates select="mea:WORKORDER"/>
</xsl:template>
<xsl:template match="mea:WORKORDER">
<ExecuteMultipleOperations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Operations>
<Operation xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Object>
<Object xsi:type="Task">
<xsl:apply-templates select="mea:WONUM" />
<xsl:call-template name="formatDateTime">
<xsl:with-param name="dateTime" select="mea:STATUSDATE" />
</xsl:call-template>
<xsl:call-template name="TLS"></xsl:call-template>
<xsl:apply-templates select="mea:FAILUREREPORT[mea:TYPE='PROBLEM']/mea:FAILURECODE" />
<xsl:apply-templates select="mea:FAILUREREPORT[mea:TYPE='CAUSE']/mea:FAILURECODE" />
<xsl:apply-templates select="mea:FAILUREREPORT[mea:TYPE='REMEDY']/mea:FAILURECODE" />
<xsl:call-template name="TLS2"></xsl:call-template>
</Object>
</Object>
</Operation>
</Operations>
</ExecuteMultipleOperations>
</xsl:template>
<xsl:template match="mea:WONUM">
<ExternalRefID><xsl:value-of select="." /></ExternalRefID>
<Status>Completed</Status>
</xsl:template>
<xsl:template name="formatDateTime">
<xsl:param name="dateTime" />
<xsl:variable name="date">
<xsl:value-of select="substring-before($dateTime, 'T')" />
</xsl:variable>
<xsl:variable name="time">
<xsl:value-of select="substring-before(substring-after($dateTime, 'T'), '+')" />
</xsl:variable>
<CompletionDate><xsl:value-of select="concat($date,' ',$time)" /></CompletionDate>
</xsl:template>
<xsl:template name="TLS">
<TLSMissedAppointmentReason></TLSMissedAppointmentReason>
<TLSMissedCommitmentReason></TLSMissedCommitmentReason>
<TLSAction></TLSAction>
</xsl:template>
<xsl:template match="mea:FAILUREREPORT[mea:TYPE='PROBLEM']/mea:FAILURECODE">
<TLSClearanceCode1><xsl:value-of select="." /></TLSClearanceCode1>
</xsl:template>
<xsl:template match="mea:FAILUREREPORT[mea:TYPE='CAUSE']/mea:FAILURECODE">
<TLSClearanceCode2><xsl:value-of select="." /></TLSClearanceCode2>
</xsl:template>
<xsl:template match="mea:FAILUREREPORT[mea:TYPE='REMEDY']/mea:FAILURECODE">
<TLSClearanceCode3><xsl:value-of select="." /></TLSClearanceCode3>
</xsl:template>
<xsl:template name="TLS2">
<TLSRestorationTime></TLSRestorationTime>
<TLSCompletionRemarks></TLSCompletionRemarks>
</xsl:template>
</xsl:stylesheet>
但是,输出XML无法获取FAILURECODE的值。 所以我的问题是是否是mea:FAILUREREPORT [mea:TYPE ='PROBLEM'] / mea:FAILURECODE 足以达到FAILURECODE的价值?
感谢您的帮助。
请忽略以下内容:) XSLT(可扩展样式表语言转换)是一种用于将XML文档转换为其他XML文档或其他格式(如网页HTML,纯文本或XSL格式对象)的语言,随后可以将其转换为其他格式,如PDF,PostScript和PNG。