希望转换(XSL,XSLT到Excel):
<NessusClientData_v2>
<Report name="FAKEDB" xmlns:cm="http://www.nessus.org/cm">
<ReportHost name="192.168.1.1">
<HostProperties>
<tag name="operating-system">Microsoft Windows Server 2008 R2 Enterprise Service Pack 1</tag>
<tag name="host-fqdn">FAKEDB</tag>
</HostProperties>
<ReportItem port="0" svc_name="general" protocol="tcp" severity="0" pluginID="19506" pluginName="Nessus Scan Information" pluginFamily="Settings">
</ReportItem>
<ReportItem port="1122" svc_name="availant-mgr?" protocol="tcp" severity="0" pluginID="11219" pluginName="Nessus SYN scanner" pluginFamily="Port scanners">
</ReportItem>
<ReportItem port="1122" svc_name="ssh" protocol="tcp" severity="2" pluginID="10882" pluginName="SSH Protocol Version 1 Session Key Retrieval" pluginFamily="General">
</ReportItem>
</Report>
<Report name="FAKEAPP" xmlns:cm="http://www.nessus.org/cm">
<ReportHost name="192.168.1.2">
<HostProperties>
<tag name="operating-system">Microsoft Windows Server 2008 R2 Enterprise Service Pack 1</tag>
<tag name="host-fqdn">FAKEDB</tag>
</HostProperties>
<ReportItem port="1122" svc_name="availant-mgr?" protocol="tcp" severity="0" pluginID="11219" pluginName="Nessus SYN scanner" pluginFamily="Port scanners">
</ReportItem>
<ReportItem port="1122" svc_name="ssh" protocol="tcp" severity="2" pluginID="10882" pluginName="SSH Protocol Version 1 Session Key Retrieval" pluginFamily="General">
</ReportItem>
<ReportItem port="47001" svc_name="www" protocol="tcp" severity="0" pluginID="11219" pluginName="Nessus SYN scanner" pluginFamily="Port scanners">
</ReportItem>
<ReportItem port="49152" svc_name="dce-rpc" protocol="tcp" severity="0" pluginID="11219" pluginName="Nessus SYN scanner" pluginFamily="Port scanners">
</ReportItem>
<ReportItem port="0" svc_name="general" protocol="udp" severity="0" pluginID="10287" pluginName="Traceroute Information" pluginFamily="General">
</ReportItem>
<ReportItem port="139" svc_name="smb" protocol="tcp" severity="0" pluginID="11011" pluginName="Microsoft Windows SMB Service Detection" pluginFamily="Windows">
</ReportItem>
</Report>
变成像:
Port Service FQDN
==== ======== =====
1122 availant-mgr? FAKEDB, FAKEAPP
1122 SSH FAKEDB, FAKEAPP
47001 www FAKEAPP
我可以进行直接的转换,但在单个单元格中添加多个节点段的情况就不一样了。我使用一个“generate”调用获得了一个不错的示例,但是我不能将它放入单独的列中,也不能让它执行所需的逻辑:
如果有人能指点我的话就太好了。
谢谢。肖恩。
发布于 2016-04-22 04:27:35
请考虑使用Muenchian法,它可以使用定义的键按@port
和svc_name
对ReportItem
节点进行分组。
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:cm="http://www.nessus.org/cm">
<xsl:output version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:key name="portsrvkey" match="ReportItem" use="concat(@port,@svc_name)" />
<xsl:template match="/">
<root>
<xsl:apply-templates select="*"/>
</root>
</xsl:template>
<xsl:template match="ReportHost">
<xsl:apply-templates select="ReportItem[generate-id()=
generate-id(key('portsrvkey', concat(@port,@svc_name))[1])]"/>
</xsl:template>
<xsl:template match="ReportItem[generate-id()=
generate-id(key('portsrvkey', concat(@port,@svc_name))[1])]">
<xsl:variable name="key" select="key('portsrvkey', concat(@port,@svc_name))"/>
<xsl:copy>
<por><xsl:value-of select="@port"/></por>
<service><xsl:value-of select="@svc_name"/></service>
<report><xsl:value-of select="$key/ancestor::Report/@name"/></report>
</xsl:copy>
</xsl:template>
</xsl:transform>
XML输出
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:cm="http://www.nessus.org/cm">
<ReportItem>
<por>0</por>
<service>general</service>
<report>FAKEDB FAKEAPP</report>
</ReportItem>
<ReportItem>
<por>1122</por>
<service>availant-mgr?</service>
<report>FAKEDB FAKEAPP</report>
</ReportItem>
<ReportItem>
<por>1122</por>
<service>ssh</service>
<report>FAKEDB FAKEAPP</report>
</ReportItem>
<ReportItem>
<por>47001</por>
<service>www</service>
<report>FAKEAPP</report>
</ReportItem>
<ReportItem>
<por>49152</por>
<service>dce-rpc</service>
<report>FAKEAPP</report>
</ReportItem>
<ReportItem>
<por>139</por>
<service>smb</service>
<report>FAKEAPP</report>
</ReportItem>
</root>
然后,您可以使用Excel的Workbooks.OpenXML方法导入电子表格:
Workbooks.OpenXML "C:\Path\To\Transformed\Output.xml", , xlXmlLoadImportToList
https://stackoverflow.com/questions/36782814
复制相似问题