获取从UML模型生成的xml中的属性值

时间:2016-09-15 12:12:28

标签: java xml parsing

我有一个像这样的xml字符串,我希望获得" Element / xmi:type / name"的属性值。这意味着我只想在每个元素的循环中检索类型活动元素的名称。我怎么做?我正在使用javax.xml.parsers库。

    <element xmi:idref="EAID_53685791_7F62_48a2_8BE8_DB7513AC776A" xmi:type="uml:Activity" name="Return error value" scope="public">
            <model package="EAPK_263A2FE8_8346_4d1e_A851_39B9D573143D" tpos="0" ea_localid="98" ea_eleType="element"/>
            <properties isSpecification="false" sType="Activity" nType="0" scope="public" isAbstract="false"/>
            <project author="shiva999" version="1.0" phase="1.0" created="2016-08-16 09:44:25" modified="2016-08-16 10:13:51" complexity="1" status="Proposed"/>
            <code gentype="&lt;none&gt;"/>
            <style appearance="BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=1;HSwimLanes=1;BorderStyle=0;"/>
            <modelDocument/>
            <tags/>
            <xrefs/>
            <extendedProperties tagged="0" package_name="Activity Model"/>
            <links>
                <ControlFlow xmi:id="EAID_873CF8C4_0192_4099_8F66_6B36FA760AB6" start="EAID_53685791_7F62_48a2_8BE8_DB7513AC776A" end="EAID_D2EB427B_3AFD_4700_BD72_13B36684E595"/>
                <ControlFlow xmi:id="EAID_2FECE2AE_6CA0_48a4_82AE_D743D257F37C" start="EAID_0D85B784_4393_429e_9BA1_7983BD7891CA" end="EAID_53685791_7F62_48a2_8BE8_DB7513AC776A"/>
            </links>
        </element>

以下是我编写的代码。获取错误&#34;类型NodeLis&#34;未定义方法类型(int)。我是xml解析的新手,正在引用在线教程

    public class DomXMLParser {

public static void main(String[] args) throws Exception {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document document = db.parse(new File("activity.xml"));
    NodeList nodeList = document.getElementsByTagName("Type");
    for(int x=0,size= nodeList.getLength(); x<size; x++) {
        System.out.println(nodeList.type(x).getAttributes().getNamedItem("name").getNodeValue());
    }
}

}

1 个答案:

答案 0 :(得分:0)

以下是使用XPath的代码。没有得到预期的结果。我有很多这样的活动节点和过渡边缘。所以我需要将它们存储为列表并创建层次结构图。

    public class DomXMLParser {
public static void main(String[] args)  throws ParserConfigurationException, SAXException, 
IOException, XPathExpressionException {
//DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
    File fXmlFile = new File("C:/Projekte/activity.xml");
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    dbFactory.setNamespaceAware(true);
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(fXmlFile);
    XPathFactory factory = XPathFactory.newInstance();
    XPath xpath = factory.newXPath();
    javax.xml.xpath.XPathExpression expr 
     = xpath.compile("//xmi:XMI[xmi:type ='uml:Activity']/name/text()");
   Object result = expr.evaluate(doc, XPathConstants.NODESET);
    NodeList nodes = (NodeList) result;
    for (int i = 0; i < nodes.getLength(); i++) {
        System.out.println(nodes.item(i).getNodeValue()); 
    }