Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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
在XML中存储条件逻辑(逻辑结构)_Xml_Vb.net_Conditional - Fatal编程技术网

在XML中存储条件逻辑(逻辑结构)

在XML中存储条件逻辑(逻辑结构),xml,vb.net,conditional,Xml,Vb.net,Conditional,我需要将简单条件表示为程序输入。输入必须是可读的 XML适合这种情况吗 例如,我有以下条件语句: If AnimalType = Leopard And (SourceCountry = Kenya Or TargetCountry = Kenya) Then ZooKeeper=Jack Else ZooKeeper=Jill End If 用XML表示上述内容可能如下所示: <If> <Conditional>

我需要将简单条件表示为程序输入。输入必须是可读的

XML适合这种情况吗

例如,我有以下条件语句:

If AnimalType = Leopard And (SourceCountry = Kenya Or TargetCountry = Kenya) Then
    ZooKeeper=Jack
Else
    ZooKeeper=Jill
End If
用XML表示上述内容可能如下所示:

<If>                
    <Conditional>           
        <And>       
            <AnimalType>Leopard<AnimalType> 
            <Or>    
                <SourceCountry>Kenya</SourceCountry>
                <TargetCountry>Kenya</TargetCountry>
            </Or>   
        </And>      
    </Conditional>  
    <True>  
        <ZooKeeper>Jack</ZooKeeper>
    </True> 
    <False> 
        <ZooKeeper>Jill</ZooKeeper>
    <False> 
</If>   
    <Conditional>
        If AnimalType = Leopard And (SourceCountry = Kenya Or TargetCountry = Kenya) Then
            ZooKeeper=Jack
        Else
            ZooKeeper=Jill
        End If
    </Conditional>

豹子
肯尼亚
肯尼亚
杰克
吉尔
关于如何最好地用XML表示条件语句,有什么想法吗

我还没有探索如何使用属性。我目前不需要嵌套的'If'语句或'elseif'子句,但无论如何我都会尝试使用它们


在这种情况下,VB代码可能比XML更具“可读性”,我应该创建一种自定义平面文件格式。

XML在这方面没有问题,但您可以使用更轻的语法(如LISP样式列表)来节省一些开销:

(if
    (and
         (AnimalType Leopard)
         (or
             (SourceCountry Kenya)
             (TargetCountry Kenya)
         )
     )
     (ZooKeeper Jack)
     (ZooKeeper Jill)
 )

您可以使用if中项目的顺序,而不是显式声明条件true和false。您需要的基本要求是保留正确的语法树。

您说希望它是人类可读的,然后介绍了一个几乎无法理解的XML示例。我不确定XML给您带来了什么。为真正的人类可读语言提供一个简单的解析器可能是一项很好的时间投资。

也许您听说过或见过

这似乎就是你要找的。有一个开源规则引擎,它使用我在C#中使用的.NET规则ML:


NxBRE还有一个Visio模具,使查看规则更容易让其他人理解。他们还尝试了一种人类可读的格式,但我不确定这是否还在进行中。

既然XML在这种情况下很方便,VB也很“人类可读”,我想我会选择这样的格式:

<If>                
    <Conditional>           
        <And>       
            <AnimalType>Leopard<AnimalType> 
            <Or>    
                <SourceCountry>Kenya</SourceCountry>
                <TargetCountry>Kenya</TargetCountry>
            </Or>   
        </And>      
    </Conditional>  
    <True>  
        <ZooKeeper>Jack</ZooKeeper>
    </True> 
    <False> 
        <ZooKeeper>Jill</ZooKeeper>
    <False> 
</If>   
    <Conditional>
        If AnimalType = Leopard And (SourceCountry = Kenya Or TargetCountry = Kenya) Then
            ZooKeeper=Jack
        Else
            ZooKeeper=Jill
        End If
    </Conditional>

如果AnimalType=Leopard和(SourceCountry=Kenya或TargetCountry=Kenya),则
动物园管理员=杰克
其他的
动物园管理员=吉尔
如果结束