本文来自李明子csdn博客(http://blog.csdn.net/free1985),商业转载请联系博主获得授权,非商业转载请注明出处!
本文中的示例代码编写于2013年5月,为笔者预研OpenXES所写。代码中包含了XES的主要元素,展示了使用OpenXes对XES文件反序列化的方法。鉴于当时的产品开发环境环境,本文代码由C#编写。因OpenXES是基于java的开发库,故笔者使用IKVM对其进行了转换包装。
以下是示例代码。
/// <summary>
/// 反序列化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <returns></returns>
private void DeserializationButton_Click(object sender, EventArgs e)
{
XesXmlParser xesParser = new XesXmlParser();
//java.net.URI xesUri = new java.net.URI("file:///D:/lmz测试采购流程.xes");
java.net.URI xesUri = new java.net.URI("file:///D:/1460680A86E9C54EA52BB804F0C28CDC-公司内工作联系单审签流程.xes");
java.io.File xesFile = new java.io.File(xesUri);
bool canParse = xesParser.canParse(xesFile);
if (canParse)
{
java.util.List xlogs = xesParser.parse(xesFile);
string debugString = "共包含" + xlogs.size().ToString() + "个log";
Debug.WriteLine(debugString);
// 遍历所有的log
for (int i = 0; i < xlogs.size(); i++)
{
debugString = "第" + i.ToString() + "个log:";
Debug.WriteLine(debugString);
XLog xLog = (XLog)xlogs.get(i);
XAttributeMap logAttributeMap = xLog.getAttributes();
Set logAttributeKeySet = logAttributeMap.keySet();
Iterator logAttributeIterator = logAttributeKeySet.iterator();
while (logAttributeIterator.hasNext())
{
// 实际是string
object logAttributeKey = logAttributeIterator.next();
// 实际是XAttribute
object logAttributeValue = logAttributeMap.get(logAttributeKey);
debugString = logAttributeKey.ToString() + ":" + logAttributeValue.ToString();
Debug.WriteLine(debugString);
}
java.util.List xTraces = xLog;
debugString = "共包含" + xTraces.size().ToString() + "个trace:";
Debug.WriteLine(debugString);
// 遍历所有的trace
for (int j = 0; j < xTraces.size(); j++)
{
debugString = " 第" + j.ToString() + "个trace:";
Debug.WriteLine(debugString);
XTrace xTrace = (XTrace)xTraces.get(j);
XAttributeMap traceAttributeMap = xTrace.getAttributes();
Set traceAttributeKeySet = traceAttributeMap.keySet();
Iterator traceAttributeIterator = traceAttributeKeySet.iterator();
while (traceAttributeIterator.hasNext())
{
object traceAttributeKey = traceAttributeIterator.next();
object traceAttributeValue = traceAttributeMap.get(traceAttributeKey);
debugString = " " + traceAttributeKey.ToString() + ":" + traceAttributeValue.ToString();
Debug.WriteLine(debugString);
}
java.util.List xEvents = xTrace;
debugString = " 共包含" + xEvents.size().ToString() + "个event:";
Debug.WriteLine(debugString);
// 遍历所有的event
for (int k = 0; k < xEvents.size(); k++)
{
XEvent xEvent = (XEvent)xEvents.get(k);
debugString = " 第" + k.ToString() + "个event,ID:" + xEvent.getID().toString() + ":";
Debug.WriteLine(debugString);
XAttributeMap eventAttributeMap = xEvent.getAttributes();
Set eventAttributeKeySet = eventAttributeMap.keySet();
Iterator eventAttributeIterator = eventAttributeKeySet.iterator();
while (eventAttributeIterator.hasNext())
{
object eventAttributeKey = eventAttributeIterator.next();
object eventAttributeValue = eventAttributeMap.get(eventAttributeKey);
debugString = " " + eventAttributeKey.ToString() + ":" + eventAttributeValue.ToString();
Debug.WriteLine(debugString);
}
}
}
}
}
}
从上面代码可以看出,按照log、trace、event的顺序逐层对XES文件进行解析即可对对其反序列化。