2012-05-03 31 views
0

私のXMLファイルは次のようになります。私は、タグ・ポイントの属性を取得しようとするとxmlファイルから属性を取得する方法は?

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE pointList SYSTEM "point.dtd"> 
<pointList> 
<point unit="mm"> 
<x>2</x> 
<y>3</y> 
</point> 

<point unit="cm"> 
<x>9</x> 
<y>3</y> 
</point> 

<point unit="px"> 
<x>4</x> 
<y>7</y> 
</point> 

</pointList> 

import java.io.File; 
import java.io.IOException; 


import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NamedNodeMap; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException; 


public class TryXml { 
    public static void main (String [] args) { 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = null; 
     Document doc = null; 
     try { 
      builder = factory.newDocumentBuilder(); 
     } 
     catch (ParserConfigurationException e){ 
      System.out.println(e.getMessage()); 
     } 
     File f = new File("p1.xml"); 
     try { 
      doc=builder.parse(f); 
     } 
     catch (SAXException e){ 
      e.printStackTrace(); 
     } 
     catch (IOException e){ 
      e.printStackTrace(); 
     } 

     Element root = doc.getDocumentElement(); 
     System.out.println(root.getTagName()); 

     System.out.println("****************"); 


     NodeList nList = root.getChildNodes(); 
     for (int i=0;i<nList.getLength();i++) { 
     if(nList.item(i) instanceof Element) 

     System.out.println(nList.item(i).getAttributes()); 
    } 

    } 
    } 

を私が得るすべてのアドレスのようなものです:

[email protected] 
[email protected] 
[email protected] 

缶誰かがポイントの属性や他の内部タグを取得する方法のヒントを教えてくれますか?

答えて

1

次であなたのprintlnを置き換えることができます:

System.out.println(((Element) nList.item(i)).getAttribute("unit")); 

これはあなたの現在の要素の「単位」属性を与える必要があります。

+0

私は "ユニット"を使用する場合どのように内部タグの値を取得するのですか?私は結果が必要です: 'point 23mm、point 93cm、point 47px' – Gipsy

+1

これで' Element'を手に入れました。 .getChildNodes() 'はあなたのコードで' nList'を使ったときと同じように繰り返し処理できる 'NodeList'を提供します。 – Oliver

+0

@Gipsy私の答えの編集を参照してください。 –

0

使用、

"エレメントルート= doc.getElementByTagName(" pointList ");" の代わりに

"エレメントルート= doc.getDocumentElement();"

0

Element.getAttributes()には、そのすべての属性のリストが表示されます。Elementあらかじめ属性の名前を知っていて、その値を取得したい場合は、代わりにElement.getAttribute(String)を使用してください。

子要素を取得する必要がある場合は、Element.getChildNodes()を使用します。 Element、具体的にはNodeのテキストを取得するには、getNodeValue()を使用します。例えば

 NodeList nList = root.getChildNodes(); 
     String out = ""; 
     for (int i=0;i<nList.getLength();i++) { 
      // Assuming all first-level tags are <point> 
      Element point = (Element) nList.item(i); 
      String unit = point.getAttribute("unit"); 
      out += "point "; 
      for (int y=0;y<point.getChildNodes().getLength();y++){ 
       Node child = point.getChildNodes().item(y); 
       // String nodeName = child.getNodeName(); 
       String nodeValue = child.getNodeValue(); 
       out += nodeValue; 
      } 
     out += unit; 
     out += ", "; 
     } 

ウィル出力point 23mm, point 93cm, point 47px,

+0

System.out.println()に何を入れますか?コード内のどこに配置する必要がありますか?また、 'Element point =(Element)nList.item(i);である。 'は、org.w3c.dom.Elementにキャストできないと言っています – Gipsy

0

この投稿getting xml attribute with javaあなたが達成しようとしていることを行います。それは、定期的なXMLの解析と操作を教えてくれます。また、属性を取得します。

幸運を祈る!

関連する問題