我需要帮助创建XSLT变换文件以遵循XML代码。最后,访问中导入的数据应具有以下列:"消息uid"," time"," ircptaction"," trackerid"," orcpts"," ofercpts"," trive"," cack"," tls_received"," sender"," sender"," source"," objucts","主题"等等。
我试图在此站点上的某些示例上创建我的XSLT文件基础,但是由于IM pre noob状态在XML方面,我的状态并没有太远。
有人可以帮助我构建XSLT文件的第一部分吗?
<message UID="d4622233-f99ff70000003b12-f4-59b0dc8a55f9">
<events>
<event time="1504763018" name="IRCPTACTION">Test@test.com|deliver</event>
<event time="1504763018" name="TRACKERID">Test@test.com|iiiiiddddddd</event>
<event time="1504763018" name="ORCPTS">Test@test.com</event>
<event time="1504763019" name="DELIVER">192.168.1.1:25|Test@test.com</event>
<event time="1504763018" name="ACCEPT">192.168.1.2:33564</event>
<event time="1504763018" name="TLS_RECEIVED">yes</event>
<event time="1504763018" name="SENDER">Me</event>
<event time="1504763018" name="SOURCE">external</event>
<event time="1504763018" name="SUBJECT">Test Message</event>
<event time="1504763018" name="MSGID">Message_ID;</event>
<event time="1504763018" name="MSG_SIZE">2</event>
<event time="1504763018" name="EHLO">MyServer</event>
<event time="1504763018" name="LOGICAL_IP">192.168.1.1</event>
<event time="1504763018" name="FIRED">Test@test.com|none</event>
<event time="1504763018" name="VERDICT">Test@test.com|none|default</event>
<event time="1504763018" name="UNTESTED">Test@test.com|has_urls|dz_document|</event>
</events>
</message>
<message UID="d4622233-f81ff70000003b12-c8-59b0105f670f">
<events>
<event time="1504763018" name="IRCPTACTION">Test@test.com|deliver</event>
<event time="1504763018" name="TRACKERID">Test@test.com|iiiiiddddddd</event>
<event time="1504763018" name="ORCPTS">Test@test.com</event>
<event time="1504763019" name="DELIVER">192.168.1.1:25|Test@test.com</event>
<event time="1504763018" name="ACCEPT">192.168.1.2:33564</event>
<event time="1504763018" name="TLS_RECEIVED">yes</event>
<event time="1504763018" name="SENDER">Me</event>
<event time="1504763018" name="SOURCE">external</event>
<event time="1504763018" name="SUBJECT">Test Message</event>
<event time="1504763018" name="MSGID">Message_ID;</event>
<event time="1504763018" name="MSG_SIZE">2</event>
<event time="1504763018" name="EHLO">MyServer</event>
<event time="1504763018" name="LOGICAL_IP">192.168.1.1</event>
<event time="1504763018" name="FIRED">Test@test.com|none</event>
<event time="1504763018" name="VERDICT">Test@test.com|none|default</event>
<event time="1504763018" name="UNTESTED">Test@test.com|has_urls|dz_document|</event>
</events>
</message>
只需通过将@name
属性映射到元素名称并保留文本来重新编写<message>
和<event>
节点即可。 message_uid 和计时器运行一次,因为所有孩子都相同。
XSLT
(假设<messages>
是无XMLNS名称空间的根)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/messages">
<xsl:copy>
<xsl:apply-templates select="message"/>
</xsl:copy>
</xsl:template>
<!-- RE-WRITE MESSSAGE NODE -->
<xsl:template match="message">
<xsl:copy>
<MESSAGE_UID><xsl:value-of select="@UID"/></MESSAGE_UID>
<TIMER><xsl:value-of select="events/event/@time"/></TIMER>
<xsl:apply-templates select="events/event"/>
</xsl:copy>
</xsl:template>
<!-- MAP ATTRIBUTE TO NEW NODE NAMES, RETAINING EVENT TEXT -->
<xsl:template match="events/event">
<xsl:element name="{@name}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
output (足够扁平以导入MS访问表)
<?xml version="1.0"?>
<messages>
<message>
<MESSAGE_UID>d4622233-f99ff70000003b12-f4-59b0dc8a55f9</MESSAGE_UID>
<TIMER>1504763018</TIMER>
<IRCPTACTION>Test@test.com|deliver</IRCPTACTION>
<TRACKERID>Test@test.com|iiiiiddddddd</TRACKERID>
<ORCPTS>Test@test.com</ORCPTS>
<DELIVER>192.168.1.1:25|Test@test.com</DELIVER>
<ACCEPT>192.168.1.2:33564</ACCEPT>
<TLS_RECEIVED>yes</TLS_RECEIVED>
<SENDER>Me</SENDER>
<SOURCE>external</SOURCE>
<SUBJECT>Test Message</SUBJECT>
<MSGID>Message_ID;</MSGID>
<MSG_SIZE>2</MSG_SIZE>
<EHLO>MyServer</EHLO>
<LOGICAL_IP>192.168.1.1</LOGICAL_IP>
<FIRED>Test@test.com|none</FIRED>
<VERDICT>Test@test.com|none|default</VERDICT>
<UNTESTED>Test@test.com|has_urls|dz_document|</UNTESTED>
</message>
<message>
<MESSAGE_UID>d4622233-f81ff70000003b12-c8-59b0105f670f</MESSAGE_UID>
<TIMER>1504763018</TIMER>
<IRCPTACTION>Test@test.com|deliver</IRCPTACTION>
<TRACKERID>Test@test.com|iiiiiddddddd</TRACKERID>
<ORCPTS>Test@test.com</ORCPTS>
<DELIVER>192.168.1.1:25|Test@test.com</DELIVER>
<ACCEPT>192.168.1.2:33564</ACCEPT>
<TLS_RECEIVED>yes</TLS_RECEIVED>
<SENDER>Me</SENDER>
<SOURCE>external</SOURCE>
<SUBJECT>Test Message</SUBJECT>
<MSGID>Message_ID;</MSGID>
<MSG_SIZE>2</MSG_SIZE>
<EHLO>MyServer</EHLO>
<LOGICAL_IP>192.168.1.1</LOGICAL_IP>
<FIRED>Test@test.com|none</FIRED>
<VERDICT>Test@test.com|none|default</VERDICT>
<UNTESTED>Test@test.com|has_urls|dz_document|</UNTESTED>
</message>
</messages>