gpt4 book ai didi

java - 在 XML 中存储二维表(决策表)以实现高效查询

转载 作者:数据小太阳 更新时间:2023-10-29 02:59:54 27 4
gpt4 key购买 nike

我需要在有许多参数的地方实现一个路由表。

例如,我在下面的传入消息中说明了五个属性

Customer Txn Group Txn Type Sender Priority  Target
UTI CORP ONEOFF ABC LOW TRG1
UTI GOV ONEOFF ABC LOW TRG2

用 XML 表示此数据的最佳方式是什么,以便可以有效地查询。

我想将这些数据存储在 XML 中,并使用 Java 将其加载到内存中,当收到消息时,我想根据属性识别目标。

感谢任何输入。

谢谢,莽卢

最佳答案

这是一个纯 XML 表示,可以按原样非常有效地处理,无需转换为任何其他内部数据结构:

<table>
<record Customer="UTI" Txn-Group="CORP"
Txn-Type="ONEOFF" Sender="ABC1"
Priority="LOW" Target="TRG1"/>

<record Customer="UTI" Txn-Group="Gov"
Txn-Type="ONEOFF" Sender="ABC2"
Priority="LOW" Target="TRG2"/>


</table>

有一种非常有效的方法可以使用 <xsl:key> 查询这种格式的数据指令和 XSLT key()功能:

这个转换:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>

<xsl:key name="kRec" match="record"
use="concat(@Customer,'+',@Sender)"/>

<xsl:template match="/">
<xsl:copy-of select="key('kRec', 'UTI+ABC2')"/>
</xsl:template>
</xsl:stylesheet>

当应用于上述 XML 文档时会产生所需的结果:

<record Customer="UTI" 
Txn-Group="Gov" Txn-Type="ONEOFF"
Sender="ABC2" Priority="LOW"
Target="TRG2"/>

请注意以下事项:

  1. 可以有多个<xsl:key>已定义,它使用要连接在一起的不同值组合来识别记录(无论什么都将被视为“键”和/或“主键”)。

  2. 如果 <xsl:key>定义为使用“主键”的串联,然后在评估 key() 函数时将找到唯一记录(或没有记录)。

  3. 如果 <xsl:key>被定义为使用“非主键”的串联,那么在评估 key() 函数时可能会找到多个记录。

  4. <xsl:key>指令相当于在数据库中定义一个索引。这使得使用 key() 函数非常高效

  5. 在很多情况下,没有必要将上述 XML 形式转换为中间数据结构,既不是出于可理解性的原因,也不是出于效率方面的原因。

关于java - 在 XML 中存储二维表(决策表)以实现高效查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/534807/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com