我目前正在嘗試爲一些XMI文件編寫簡單的解析器(從UML圖生成),但是當我嘗試從此代碼片段中提取目標xmi.idref時遇到了一些問題(我想要檢索連接的元素一個給定的活動,我已經成功地檢索到的所有呼入/呼出邊緣):Java DOM解析器:XMI - 內聯標記?
<UML2:ActivityEdge xmi.id = 'I6bf577d1m1387a6c0ea1mm7dcb' visibility = 'public' is Specification = 'false'>
<UML2:ActivityEdge.target>
<UML2:CallAction xmi.idref = 'I6bf577d1m1387a6c0ea1mm7dda'/>
</UML2:ActivityEdge.target>
我的問題是,當我嘗試提取UML2:CallAction,我的程序沒有檢測到它作爲一個元素節點而是作爲一個文本節點,這是空的方式。下面是我做的一個樣本:
Element edge = searchById(doc,"UML2:ActivityEdge",id);
Element group = (Element) edge.getElementsByTagName("UML2:ActivityEdge.target").item(0);
Node target = group.getChildNodes().item(0);
Element targetRef = (Element) target;
Element t = searchById(doc,targetRef.getNodeName(),targetRef.getAttribute("xmi.idref"));
nameList.add(t.getAttribute("name"));
的searchById方法的工作(我用它在我的代碼各部分),但如果你認爲它可能是這個問題,我會後它。請注意,我使用getChildNodes而不是getElementsByTagName,因爲此邊的目標可能不總是一個活動(例如XOR連接/合併節點)。確切的錯誤是:
com.sun.org.apache.xerces.internal.dom.DeferredTextImpl cannot be cast to org.w3c.dom.Element
當我嘗試投「目標」來元......我想這來自於一個事實,這是一個「內聯」的標籤,但我不知道如何對待它,處於解析初學者...
感謝您的幫助,
埃爾韋
編輯:我試圖通過的getElementsByTagName更換getChildNodes,它似乎工作...但是,如果有人可以糾正上面的代碼或者至少可以解釋爲什麼它不能正常工作,那就是woul d太棒了。
謝謝,就是我不明白的......快速循環解決了我的問題! – anonymous2339901 2012-07-30 05:12:22