首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将XML文件(在本例中为业务流程事件日志)导入并进行查询?

如何将XML文件(在本例中为业务流程事件日志)导入并进行查询?
EN

Stack Overflow用户
提问于 2016-02-12 10:55:27
回答 1查看 142关注 0票数 0

为了保持简短,我有这个".xes“(可扩展事件流)文件,它实际上是一个XML,看起来如下(此代码仅显示一个事件的示例-该文件包含多个类似于此事件的事件):

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8" ?>
<log xes.version="1.0" xes.features="nested-attributes" openxes.version="1.0RC7" xmlns="http://www.xes-standard.org/">
    <trace>
        <string key="concept:name" value="0"/>
        <event>
            <string key="org:resource" value="Call Centre Agent"/>
            <date key="time:timestamp" value="2006-01-01T00:00:00.000+01:00"/>
            <string key="concept:name" value="check if sufficient information is available"/>
            <string key="lifecycle:transition" value="start"/>
        </event>
     </trace>
...

实际上,该文件表示一个业务流程事件日志,它包含一个流程的不同活动的事件,并具有时间戳和进一步的信息。

我需要从这些数据中提取信息,并准备一些SQL查询。

我目前正在使用SQLServer2014Express数据库,在导入和查询数据时遇到了困难。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-12 11:19:35

这是一种将文件的内容放入变量的通用方法:这是将文件的内容放入变量的一般方法:

代码语言:javascript
运行
复制
DECLARE @xml XML=
(SELECT *  FROM OPENROWSET(BULK 'C:\YourPath\XMLFile.xml',SINGLE_CLOB) AS x);
SELECT @xml;

因为这是嵌套数据(嵌套层次不清楚.)这是我的建议:

代码语言:javascript
运行
复制
DECLARE @log XML=
'<log xmlns="http://www.xes-standard.org/" xes.version="1.0" xes.features="nested-attributes" openxes.version="1.0RC7">
  <trace>
    <string key="concept:name" value="0" />
    <event>
      <string key="org:resource" value="Call Centre Agent" />
      <date key="time:timestamp" value="2006-01-01T00:00:00.000+01:00" />
      <string key="concept:name" value="check if sufficient information is available" />
      <string key="lifecycle:transition" value="start" />
    </event>
    <event>
      <string key="second-resouce" value="Call Centre Agent" />
      <date key="second:timestamp" value="2006-01-01T00:00:00.000+01:00" />
      <string key="second:name" value="check if sufficient information is available" />
      <string key="second:transition" value="start" />
    </event>
  </trace>
</log>';

WITH XMLNAMESPACES(DEFAULT 'http://www.xes-standard.org/')
SELECT TraceNode.value('string[1]/@key','varchar(max)') AS Trace_String_Key
      ,TraceNode.value('string[1]/@value','int') AS Trace_String_Value
      ,EventNode.value('date[1]/@key','varchar(max)') AS Trace_Event_Date_Key
      ,EventNode.value('date[1]/@value','datetime') AS Trace_Event_Date_Value
      ,EventStringNode.value('@key','varchar(max)') AS Trace_Event_String_Key
      ,EventStringNode.value('@value','varchar(max)') AS Trace_Event_String_Value

FROM @log.nodes('/log/trace') AS a(TraceNode)
OUTER APPLY TraceNode.nodes('event') AS b(EventNode)
OUTER APPLY EventNode.nodes('string') AS c(EventStringNode)

你对我如何查询这些数据有什么建议吗?一些实用的例子是有用的。

这真的取决于你..。如果你问这样一个问题,你应该知道你需要它做什么:-)

有一个想法:

创建关系表结构

  • 表“日志”(每个日志文件和旁数据)
  • 表“事件”(子数据到“日志”)
  • 表"EventData“(子数据到”事件“)

可以使用查询检索数据,将其插入到表中.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35360801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档