Regex xslt正则表达式

Regex xslt正则表达式,regex,xslt,Regex,Xslt,处理nessus xml文件的更多问题 我从nessus获得了一些xml数据,这些数据将主机名等信息存储在xml标记中,可以使用以下xsl标记提取: <xsl:value-of select="../ReportItem[(@pluginID=12053)]/description"/> 那么唯一的问题是这个标记除了主机名之外还存储了一堆垃圾。例如,标签中通常包含以下信息: 简介:可以获取远程服务器的网络名称 主办描述:远程主机在UDP端口137或TCP上侦听 端口445并答复

处理nessus xml文件的更多问题

我从nessus获得了一些xml数据,这些数据将主机名等信息存储在xml标记中,可以使用以下xsl标记提取:

<xsl:value-of select="../ReportItem[(@pluginID=12053)]/description"/>

那么唯一的问题是这个标记除了主机名之外还存储了一堆垃圾。例如,标签中通常包含以下信息:

简介:可以获取远程服务器的网络名称 主办描述:远程主机在UDP端口137或TCP上侦听 端口445并答复NetBIOS nbtscan或SMB请求。注意 此插件收集信息,以便在其他插件中使用,但不会 它本身不会生成报告。解决方案:不适用风险因素:无插件 输出:收集了以下6个NetBIOS名称:VOODOO1= 计算机名VOODOO=工作组/域名VOODOO1=文件服务器 服务巫毒=浏览器服务巫毒=主浏览器 MSBROWSE=主浏览器远程主机的适配器上有以下MAC地址:10:50:56:ab:10:02

我唯一感兴趣的部分是“伏都教1=计算机名”部分。更准确地说,在“=”符号之前是什么。我想知道是否有可能在标签的“select”中有一个正则表达式函数,比如:

<xsl:value-of select="regexp(../ReportItem[(@pluginID=12053)]/description,'\w =')"/>

这将只提取与正则表达式匹配的标记内容并显示它。现在我有标签显示的全部内容,这很烦人。我曾尝试使用各种不同的

<xsl:analyze-string select="$elValue" regex="\w = ">

没有运气的标签。我不断收到这样的错误:“不能是
的子标签,也不能是我尝试过的任何其他xslt元素的子标签

提前谢谢

根据到目前为止的反馈,以下是nessus生成的一些xml

<ReportItem port="137" svc_name="netbios-ns?" protocol="udp" severity="1"     pluginID="10150" pluginName="Windows NetBIOS / SMB Remote Host Information Disclosure" pluginFamily="Windows">
<description>Synopsis :

It is possible to obtain the network name of the remote host.

Description :

The remote host listens on UDP port 137 or TCP port 445 and replies to NetBIOS nbtscan or SMB requests. 

Note that this plugin gathers information to be used in other plugins but does not itself generate a report.

Solution :

n/a

Risk factor :

None

Plugin output :
The following 6 NetBIOS names have been gathered :

 VOODOO1       = Computer name  VOODOO              = Workgroup / Domain name     VOODOO1       = File Server Service  VOODOO              = Browser Service Elections     VOODOO              = Master Browser
 __MSBROWSE__     = Master Browser

The remote host has the following MAC address on its adapter :
   01:a0:52:bf:0a:02

</description>
</ReportItem>`

简介:
可以获取远程主机的网络名称。
说明:
远程主机侦听UDP端口137或TCP端口445,并回复NetBIOS nbtscan或SMB请求。
请注意,此插件收集其他插件中使用的信息,但它本身并不生成报告。
解决方案:
不适用
风险因素:
没有一个
插件输出:
已收集到以下6个NetBIOS名称:
VOODOO1=计算机名VOODOO=工作组/域名VOODOO1=文件服务器服务VOODOO=浏览器服务VOODOO=主浏览器
__MSBROWSE_;=主浏览器
远程主机的适配器上有以下MAC地址:
01:a0:52:bf:0a:02
`

这一行实际上不起作用。我编造它是为了看看是否有人知道是否有类似的东西。它只会生成一个错误,因为这是我编造的。

为此需要XSLT2.0。我怀疑您在使用xsl:analyze string时收到的错误消息是因为您使用的是XSLT 1.0处理器。

正如Mike Kay指出的,这不适用于XSLT 1.0。获取的.NET版本,以便可以使用更现代的XSLT版本。您可以从命令行或Powershell调用它。以下是一个让您开始学习的示例:

 <xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="2.0">  
    <xsl:template match="description">
        <xsl:analyze-string select="."
            regex="(\w+)\s+=\s*Computer name">
            <xsl:matching-substring>
                <xsl:value-of select="regex-group(1)" />
            </xsl:matching-substring>
            <xsl:non-matching-substring>
            </xsl:non-matching-substring>
        </xsl:analyze-string>
    </xsl:template>
</xsl:stylesheet>


XSLT 1.0还是2.0?如果是1.0,是什么引擎?你是说指令值发出“VOODOO1=计算机名VOODOO=工作组/域名…”还是你发布的指令值根本不起作用?若您添加输入XML的具体示例、当前获得的内容(若有的话)以及您想要的内容,这将非常有用。这是从nessus生成的。对不起,我的意思是说xml是添加到原始帖子中的。我提出的xml行不起作用,因为我把它编造成一个想法,我认为如果有人熟悉它的话,它可能是可行的。一般来说,我尝试使用正则表达式过滤某些内容,并尽可能在select中将其返回给我。我使用windows powershell使用.net xml对象。错误消息似乎表明它识别xsl命令,但不希望它作为我放在下面的任何东西的子标签。我看到的关于它用法的其他示例表明,它可以是我使用的标记的子标记。您知道是否可以对选定的xpath结果执行正则表达式吗?Microsoft处理器仅实现1.0。如果您想发展到更新的XML技术,您需要开始考虑第三方解决方案,这是一个不错的选择。