我有一个审计/日志系统,它使用原始 XML 来表示应用程序执行的操作。我想通过在应用程序的 SQL Server 数据库的表中使用 XML 列来大大改进这个系统。
表中的每一行都将包含一个日志条目,并且每个条目都应包含一个或多个标签,这些标签用于以语义方式描述操作,允许我以匹配应用程序审计需求的方式进行搜索,例如:
<updateInvoice id="5" userId="7" /><fieldUpdate name="InvoiceDate" /><invoice /><update />
<deleteInvoice id="5" userId="6" /><invoice /><delete />
我的意图是通过指定标签和属性的组合来包含或排除行,从而从该表中返回行集(例如“包含带有标签的所有行,invoice
但排除带有属性的行userId='7'
”,或“包含带有标签的所有行,invoice
但排除行带标签delete
)
我希望通过使用简单过滤器结构的组合以编程方式来表示我希望包含或排除行的标记和属性的组合。
我使用的结构如下所示:
enum FilterInclusion { Include, Exclude };
public struct Filter
{
FilterInclusion Inclusion;
string TagName;
string? AttributeName;
object? AttributeValue;
}
我的目标是接受其中的一组并生成一个查询,该查询返回与任何单个包含过滤器匹配的任何行,而不匹配任何单个排除过滤器。
我应该并且可以将这个布尔逻辑编码到生成的 XPath 本身中,还是我正在查看在输出的查询中有多个 SELECT 语句?我是 XQuery 的新手,感谢您提供任何帮助。谢谢!