JavaDOM解析器:XMI-Inline标记?

JavaDOM解析器:XMI-Inline标记?,java,dom,xmi,Java,Dom,Xmi,我目前正试图为一些XMI文件(从UML图生成)编写一个简单的解析器,但当我试图从这个代码片段中提取目标XMI.idref时遇到了一些问题(我想检索连接到给定活动的元素,我已成功检索了所有传入/传出边缘): searchById方法正在工作(我在代码的各个部分都使用它),但是如果您认为这可能是问题所在,我会发布它。请注意,我使用getChildNodes而不是getElementsByTagName,因为此边缘的目标可能并不总是活动(例如XOR连接/合并节点)。确切的错误是: com.sun.or

我目前正试图为一些XMI文件(从UML图生成)编写一个简单的解析器,但当我试图从这个代码片段中提取目标XMI.idref时遇到了一些问题(我想检索连接到给定活动的元素,我已成功检索了所有传入/传出边缘):

searchById方法正在工作(我在代码的各个部分都使用它),但是如果您认为这可能是问题所在,我会发布它。请注意,我使用getChildNodes而不是getElementsByTagName,因为此边缘的目标可能并不总是活动(例如XOR连接/合并节点)。确切的错误是:

com.sun.org.apache.xerces.internal.dom.DeferredTextImpl cannot be cast to org.w3c.dom.Element
当我尝试将“目标”投射到元素时。。。我猜这是因为它是一个“内联”标记,但我不知道如何处理它,因为我是一个语法分析的初学者

谢谢你的帮助

赫维


编辑:我试着用getElementsByTagName替换getChildNodes,它似乎起作用了。。。但是,如果有人能纠正上述代码,或者至少解释一下它为什么不能正常工作,那就太棒了。

简而言之,您错误地假设
getChildNodes()
只返回XML
元素
s;它不返回,它还返回其他类型的节点,包括表示感兴趣的元素之间的空格和换行符的文本节点


如果要调用
getChildNodes()
并处理所有节点,则需要循环所有返回的节点,并查看每个节点以确定它是什么类型的节点,并相应地进行处理。如果您不想这样做,那么像
getElementsByTagName()
这样的东西是另一种选择。

谢谢,我不明白的是。。。快速循环解决了我的问题!
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"));
com.sun.org.apache.xerces.internal.dom.DeferredTextImpl cannot be cast to org.w3c.dom.Element