2016-09-15 9 views
-1

このようなxml文字列があり、 "Element/xmi:type/name"の属性値を取得したいとします。これは、各要素のループ内でのみタイプアクティビティの要素の名前を検索したいことを意味します。それ、どうやったら出来るの?私はjavax.xml.parsersライブラリを使用しています。UMLモデルから生成されたxmlの属性値の取得

<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> 

以下は私が書いたコードです。 「NodeLis型のメソッドの型(int)が未定義です」というエラーが発生しました。私は以下のXPathを使用して使用されるコードである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()); 
    } 
} 

}

+0

こんにちは、 私はXPathを使用します。https://docs.oracle.com/javase/7/docs/api/javax/xml/xpath/package-summary.html サポートがネイティブである、それはです読者を設定し、正しい道を渡すだけの問題です。 – BugProtectionActivist

+0

@BugProtectionActivist私が使用したxpathを投稿しました。期待される出力はありません。助けてください –

答えて

0

を参照のうえれます。期待された結果が得られません。私はそれらのために多くのそのような活動ノードと遷移エッジを持っています。だから私はそれらをリストとして保存し、階層グラフを作成する必要があります。

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()); 
    } 
+0

こんにちは、私はそれをテストするために完全なXML(ヘッダー)が必要ですが、私は正しいxpathは、//要素[@xmi:type = 'uml:Activity']/name/text() ' – BugProtectionActivist

関連する問題