Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确定要写出的正确xml correlator01.example.com 2000-03-09T15:31:07Z 192.0.2.200 www.example.com 192.0.2.50 5. 端口扫描 http://www.vendor.com/portscan_C#_Xml_Xpath - Fatal编程技术网

C# 如何确定要写出的正确xml correlator01.example.com 2000-03-09T15:31:07Z 192.0.2.200 www.example.com 192.0.2.50 5. 端口扫描 http://www.vendor.com/portscan

C# 如何确定要写出的正确xml correlator01.example.com 2000-03-09T15:31:07Z 192.0.2.200 www.example.com 192.0.2.50 5. 端口扫描 http://www.vendor.com/portscan,c#,xml,xpath,C#,Xml,Xpath,我正在使用一个xml消息传递系统,从队列中读取消息包,并根据其中包含模式的规则应用。如果模式匹配,则触发规则,并读取和存储xml的某些元素、节点等。要从消息中读取的内容的定义是使用Xpath表达式定义的。例如,下面的xpath接受severity属性并将其存储 name.set(“.//idmef:Classification/idmef:assessment/idmef:Impact/@severity”,“high”) 因此,我将采用该xpath,编译它,并读取serverity属性和存储,

我正在使用一个xml消息传递系统,从队列中读取消息包,并根据其中包含模式的规则应用。如果模式匹配,则触发规则,并读取和存储xml的某些元素、节点等。要从消息中读取的内容的定义是使用Xpath表达式定义的。例如,下面的xpath接受severity属性并将其存储

name.set(“.//idmef:Classification/idmef:assessment/idmef:Impact/@severity”,“high”)

因此,我将采用该xpath,编译它,并读取serverity属性和存储,以供以后使用

当我使用存储的值创建新的XML消息时,可能会出现一种情况,即completion和type属性是必需的

所以问题是,我如何检查这些属性是否需要写出。我知道某种程度上涉及到模式,但如何做到这一点呢。更重要的是,如果用户只选择severity属性,那么当有额外的xpath查找时,例如在下面的


鲍勃

注释是正确的-您需要首先修复XML以使其格式良好

但是,如果我正确理解了您的问题,您需要写出一些XML,添加或更改一些属性

如果这是您需要的,我将尝试使用XSL转换来添加属性。 这里是身份转换的一个修改版本,它应该接近您所需要的。 如果需要一些条件逻辑,那么使用xsl:if将属性标记包围起来

<?xml version="1.0" encoding="UTF-8"?>
<idmef:IDMEF-Message version="1.0"  xmlns:idmef="http://iana.org/idmef">
 <idmef:Alert messageid="abc123456789">
   <idmef:Analyzer analyzerid="bc-corr-01">
     <idmef:Node category="dns">
       <idmef:name>correlator01.example.com</idmef:name>
     </idmef:Node>
   </idmef:Analyzer>
       <idmef:CreateTime ntpstamp="0xbc72423b.0x00000000">2000-03-09T15:31:07Z
   </idmef:CreateTime>
   <idmef:Source ident="a1">
     <idmef:Node ident="a1-1">
       <idmef:Address ident="a1-2" category="ipv4-addr">
         <idmef:address>192.0.2.200</idmef:address>
       </idmef:Address>
     </idmef:Node>
   </idmef:Source>
   <idmef:Target ident="a2">
     <idmef:Node ident="a2-1" category="dns">
       <idmef:name>www.example.com</idmef:name>
       <idmef:Address ident="a2-2" category="ipv4-addr">
         <idmef:address>192.0.2.50</idmef:address>
       </idmef:Address>
     </idmef:Node>
     <idmef:Service ident="a2-3">
       <idmef:portlist>5
       </idmef:portlist>
     </idmef:Service>
   </idmef:Target>
   <idmef:Classification text="Login Authentication">
     <idmef:Reference origin="vendor-specific">
       <idmef:name>portscan</idmef:name>
       <idmef:url>http://www.vendor.com/portscan</idmef:url>
     </idmef:Reference>
   </idmef:Classification>
 <idmef:Assessment>
     <idmef:Impact severity ="high" completion ="failed" type ="file" >
     </idmef:Impact>
 </idmef:Assessment>
 </idmef:Alert>
 </idmef:IDMEF-Message>

高的
失败
文件
您可以:

  • 打开原始XML(A)
  • 创建新的XML文档(B)
  • 针对(A)运行xpath
  • 将匹配结果添加到(B)
  • 保存(B)

这有什么意义吗?

我在stackoverflow上找到了答案,就在这里。我知道它和我上面描述的相去甚远,但在我设计它的时候,我
不知道它将如何工作。

此XML格式不正确。你错过了一些吗?是的,我错过了一点。BUbtil如果你有格式良好的xml,你就不能用它做任何事情,所以请向我们提供正确的xml。我不确定你想做什么。听起来问题在于您想要创建一个格式良好且有效的XML消息。您可以得到格式良好的,但要验证,您需要知道模式。是的,我想这样做。当用户创建一个xpath表达式并在其周围绑定一个合适的值时,我希望以此为基础,围绕该xpath构建合适的xml。我有这个模式。嗨,Nont,那是不同的xml。与示例相反,我编辑了这个问题,将其放入真正的xml中。那么,这是如何工作的呢。我以前没有做过xslt。我可以看到它是如何工作的,当您选择节点,然后匹配属性时,但是如果用户给我xpath字符串以将portlist设置为5,它将如何工作,如下所示。5我将如何在其周围构建节点,并包括任何带有in的强制xml节点,显然属性字段将为空或默认值,因为用户没有提供它们。我认为您的答案非常接近,但我需要了解它如何在xml数据包的不同部分上工作。XSLT用于转换xml。其思想是,您将一段XML转换成另一段。我从您的问题中得到的印象是,您的输出文档看起来很像您的输入文档。如果是这样,那么XSL将是一个不错的选择。如果它非常不同,我错了,那么它不是一个好的选择。我使用Saxon来运行转换。我给出的示例只修改了影响节点,其余部分保持原样。对于一般的XSL教程,如果您正在寻找一个dot-net XSL简介,请尝试以下内容:Hi-Nont,我从Wrox获得了xslt参考书,但我从未抽出时间阅读它。如上所述,输出文档和输入文档使用相同的模式,如i’、构建规则引擎,该引擎基于xpath集从所选消息中获取IDMEF数据包、in和select节点。如果规则成功,它将从中选择某些xml,稍后,该xml将构建到另一个复合数据包中并发送出去。你能告诉我如何使用我之前评论中的例子吗。如果用户选择了5,我必须确定它需要的方式,但是第4和第5个动作是如何完成的。在对A运行xpath时,如何将A块应用到B中。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" 
    xmlns:idmef="http://iana.org/idmef" xpath-default-namespace="http://iana.org/idmef">
        <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

        <xsl:template match="@*|node()">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:template>

        <xsl:template match="Impact">
            <xsl:copy>
                <xsl:copy-of select="@*"/>
                <xsl:attribute name="severity">high</xsl:attribute>
                <xsl:attribute name="completion">failed</xsl:attribute>
                <xsl:attribute name="type">file</xsl:attribute>
                <xsl:apply-templates/>
            </xsl:copy>
        </xsl:template>
    </xsl:stylesheet>