我试图将wireshark xml输出文件(pdml)的某些输出转换为csv文件。XSLT用于选择特定元素和属性并输出到csv
我想选择属性name = jen的proto元素。这个XML应该有一个名为field的子元素,其中show =“Discovery JEN :: Item1”。从同一节点我想
数据包里的东西从下面的xml复制到一行来做。
- 从show =“item1ID”的字段元素中提取show属性,并且其所有 children元素都显示属性。所以输出将是节目属性,例如item1ID LCMI siteID:0 applicationID:0 objectID:1
- 使用show =“ODS ID”提取字段的子显示属性。这看起来像“HostIP:192.168.111.72(192.168.111.72)ProcessID:9588进程创建时间秒:1396466786计数器:2”
- 有一个字段元素的属性show =“MIPSI mipsi”和一个子元素字段与属性show =“Time time”。我想提取这两个子字段元素的属性。该属性看起来像显示=“nanosecondsSince1970:1396466786788509000”
我写了一点xslt之前。但这超出了我。
我意识到我会写下如下内容来至少匹配协议模板。一旦进入,我知道我需要选择字段元素,但我需要再次选择基于属性。对不起,我试过的东西太稀疏了。我真的迷失在这一点上。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="packet/proto[@name="jen]">
<xsl:copy>
<xsl:apply-templates select="*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="field[@show='Discovery OMName: JEN-Item1-v4 OMTypeName: JEN::Item1']">
<xsl:value-of select="@show"/>
</xsl:template>
<xsl:template match="field[@show='item1ID']">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="field[@show='JEN Update Header']">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="field[@show='MIPSI mipsi']">
<xsl:template match="field[@show='Time time']">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:template>
</xsl:stylesheet>
XML例如
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="pdml2html.xsl"?>
<pdml version="0" creator="wireshark/1.10.10" time="Mon Oct 20 16:46:32 2014" capture_file="C:\Users\someone\Documents\ABC\Test Files\ToSave\Item1_multicast.pcapng">
<packet>
<proto name="jen" showname="JEN" size="501" pos="134">
<field name="" show="Header Data" size="0" pos="134" value="">
<field name="" show="TAO RTEC Event Header" size="0" pos="134" value="">
<field name="" show="Number Of Events: 1" size="4" pos="134" value="01000000"/>
<field name="" show="EventType: ReflectionMessageEvent_t" size="4" pos="142" value="e8030000">
<field name="jen.eventType" showname="Event Type: 30" size="4" pos="280" show="30" value="1e000000"/>
</field>
</field>
<field name="jen.payloadtype" showname="Payload Type: 0" size="4" pos="218" show="0" value="00000000"/>
</field>
<field name="" show="Discovery OMName: JEN-Item1-v4 OMTypeName: JEN::Item1" size="8" pos="426" value="3421836700000000"/>
<field name="" show="Discovery JEN::Item1" size="0" pos="434" value="">
<field name="" show="item1ID" size="0" pos="442" value="">
<field name="" show="LCMI" size="1" pos="442" value="73"/>
<field name="" show="siteID: 0" size="2" pos="444" value="0000"/>
<field name="" show="applicationID: 0" size="2" pos="446" value="0000"/>
<field name="" show="objectID: 1" size="4" pos="450" value="01000000"/>
</field>
<field name="" show="JEN Update Header" size="0" pos="476" value="">
<field name="" show="ODS ID" size="0" pos="476" value="">
<field name="jen.ods.hostip" showname="HostIP: 192.168.111.72 (192.168.111.72)" size="4" pos="478" show="192.168.111.72" value="c0a86f48"/>
<field name="jen.ods.process" showname="ProcessID: 9588" size="4" pos="482" show="9588" value="74250000"/>
<field name="jen.ods.time" showname="Process Create Time Sec: 1396466786" size="4" pos="486" show="1396466786" value="62643c53"/>
<field name="jen.ods.counter" showname="counter: 2" size="4" pos="490" show="2" value="02000000"/>
</field>
</field>
<field name="" show="JEN::Item1 0-0-1" size="0" pos="530" value="">
<field name="" show="length: 81" size="4" pos="534" value="51000000"/>
<field name="" show="JENAffiliation affiliation=Affiliation_Unknown" size="4" pos="542" value="00000000"/>
<field name="" show="MIPSI mipsi" size="0" pos="554" value="">
<field name="" show="LCMI" size="1" pos="554" value="73"/>
<field name="" show="Optional Attribute Bit Set" size="1" pos="555" value="00"/>
<field name="" show="Time time" size="0" pos="556" value="">
<field name="" show="nanosecondsSince1970: 1396466786788509000" size="8" pos="562" value="480529cf243f6113"/>
</field>
</field>
</field>
</proto>
</packet>
</pdml>
所需的输出看起来像下面
发现OMName:JEN-项目1-V4 OMTypeName:JEN :: Item1,siteID:0 applicat ionID:0 objectID:1,HostIP:192.168.111.72(192.168.111.72)ProcessID:9588 Process Create Time Sec:1396466786 counter:2,nanosecondsSince1970:1396466786788509000
你的目标不明确。你想从你提到的领域中提取什么? – 2014-11-05 01:06:14
@ michael.hor257k对不起,我只是编辑它显示更多信息。希望在期望的输出和该信息之间更清楚。 – 2014-11-05 01:10:04
恐怕我仍然没有遵循:你说“*用show = ... *”从字段元素中提取show属性。这里没有什么可以提取的;你已经知道'show'属性包含了什么。 – 2014-11-05 01:14:50