2017-09-07 19 views
-1

次のXMLコード用のXSLT変換ファイルを作成する際に助けが必要です。 最後にアクセスされたインポートデータには、 "メッセージUID"、 "時刻"、 "IRCPTACTION"、 "TRACKERID"、 "ORCPTS"、 "DELIVER"、 "ACCEPT"、 "TLS_RECEIVED"、 "SENDER "、" SOURCE "、" SUBJECT "...などのようになります。MS Access用XML変換ファイルの作成

私はこのサイトのいくつかの例で私のXSLTファイルベースを作成しようとしましたが、XMLに関しては、私は非常に遠くには達しませんでした。

誰かがXSLTファイルの最初の部分を作成するのに役立つことができますか?

<message UID="d4622233-f99ff70000003b12-f4-59b0dc8a55f9"> 
    <events> 
     <event time="1504763018" name="IRCPTACTION">[email protected]|deliver</event> 
     <event time="1504763018" name="TRACKERID">[email protected]|iiiiiddddddd</event> 
     <event time="1504763018" name="ORCPTS">[email protected]</event> 
     <event time="1504763019" name="DELIVER">192.168.1.1:25|[email protected]</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">[email protected]|none</event> 
     <event time="1504763018" name="VERDICT">[email protected]|none|default</event> 
     <event time="1504763018" name="UNTESTED">[email protected]|has_urls|dz_document|</event> 
    </events> 
</message> 
<message UID="d4622233-f81ff70000003b12-c8-59b0105f670f"> 
    <events> 
        <event time="1504763018" name="IRCPTACTION">[email protected]|deliver</event> 
     <event time="1504763018" name="TRACKERID">[email protected]|iiiiiddddddd</event> 
     <event time="1504763018" name="ORCPTS">[email protected]</event> 
     <event time="1504763019" name="DELIVER">192.168.1.1:25|[email protected]</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">[email protected]|none</event> 
     <event time="1504763018" name="VERDICT">[email protected]|none|default</event> 
     <event time="1504763018" name="UNTESTED">[email protected]|has_urls|dz_document|</event> 
    </events> 
</message> 
+0

することはでき"DELIVER"の 'time'値がtではないため、あなたが記述した最終的なテーブル構造を持っていません彼は他の人と同じです。 (もちろん、それを放棄することに決めた場合を除いて、メッセージごとに複数の値がある場合は、どの時刻が正しいかを判断する必要があります) –

答えて

0

は、単純に要素名と保持テキストにマッピング@name属性によって<message><event>ノードを再書き込み。 MESSAGE_UIDTIMERはすべての子どもにとって同じですので、一度実行してください。

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> 

出力(MS Accessテーブルにインポートするのに十分なフラット)

<?xml version="1.0"?> 
<messages> 
    <message> 
    <MESSAGE_UID>d4622233-f99ff70000003b12-f4-59b0dc8a55f9</MESSAGE_UID> 
    <TIMER>1504763018</TIMER> 
    <IRCPTACTION>[email protected]|deliver</IRCPTACTION> 
    <TRACKERID>[email protected]|iiiiiddddddd</TRACKERID> 
    <ORCPTS>[email protected]</ORCPTS> 
    <DELIVER>192.168.1.1:25|[email protected]</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>[email protected]|none</FIRED> 
    <VERDICT>[email protected]|none|default</VERDICT> 
    <UNTESTED>[email protected]|has_urls|dz_document|</UNTESTED> 
    </message> 
    <message> 
    <MESSAGE_UID>d4622233-f81ff70000003b12-c8-59b0105f670f</MESSAGE_UID> 
    <TIMER>1504763018</TIMER> 
    <IRCPTACTION>[email protected]|deliver</IRCPTACTION> 
    <TRACKERID>[email protected]|iiiiiddddddd</TRACKERID> 
    <ORCPTS>[email protected]</ORCPTS> 
    <DELIVER>192.168.1.1:25|[email protected]</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>[email protected]|none</FIRED> 
    <VERDICT>[email protected]|none|default</VERDICT> 
    <UNTESTED>[email protected]|has_urls|dz_document|</UNTESTED> 
    </message> 
</messages> 
+0

素晴らしいXMLスキル。ありがとうございました。 私は週末にそれが動作する理由を周りに頭をラップしようとします。 :-) –

+0

素晴らしい!喜んで助けてください。ハッピーコーディング! XSLTは他の言語とは少し異なりますが、一度理解すれば優雅にすることができます! – Parfait

関連する問題