如何从java中的Apache-commons scxml api读取datamodel值

时间:2014-05-08 11:03:42

标签: java apache scxml apache-commons-scxml

我在我的java应用程序中使用SCXML。我正在使用apache-commons-scxml api来实现状态机。我可以通过sxml api在数据模型中设置值,但无法在java代码中读取该值。

每次读取操作都会获取在scxml文档中设置的默认值,而不是读取在运行时设置的最新值。但是,如果我们在scxml doc中记录相同值的表达式,那么它将打印更新的值,但在java代码中我无法获得更新的值。

以下是数据模型:

<datamodel><!-- Usage where the value is an XML data tree -->           
   <data id="XYZ">
      <A xmlns="">T</DevID> 
      <B xmlns="">F</Result>            
   </data>
</datamodel>

阅读数据模型:

List<Data> dataTest = handlerFSM.getEngine().getStateMachine().getDatamodel().getData();
Iterator<Data> itrTest = dataTest.iterator();
while(itrTest.hasNext()){
  Data d = itrTest.next();
  if(d.getId().equals("XYZ")){
  NodeList nodeList = d.getNode().getChildNodes();
}

设定值:

nodeList.item(1).setTextContent("dummy");

阅读价值:

nodeList1.item(1).getTextContent();

所有时间读取操作都给出值“F”而不是在运行时设置的“哑”。 知道如何通过apache commons-scxml api读取java代码中节点的更新值(在本例中为“dummy”)?

1 个答案:

答案 0 :(得分:0)

你可以这样做:

org.w3c.dom.Node xyz = (org.w3c.dom.Node) handlerFSM.getEngine().getRootContext().get("xyz");

xyz.getFirstChild().setTextContent("dummy");

据我所知,getStateMachine()。getDataModel()只会为您提供XML文件中定义的静态数据模型。