2012-07-27 58 views
0

這裏是一個XML:子節點

<mesh> 

    <triangles material="face" count="990"> 
      <input semantic="VERTEX" source="#boyShape-skin-vertices" offset="0"/> 
      <input semantic="NORMAL" source="#boyShape-skin-normals" offset="1"/> 
      <input semantic="TEXCOORD" source="#boyShape-skin-map-channel1" offset="2" set="1"/> 
      <p>45 56 44 61 57 45 58 58 46 58 58 46 65 59 47 45 56 44 46 60 48 67 61 49 58 58 46 58 58 46 61 57 45 46 60 48 49 62 50 66 63 51 </p> 
    </triangles> 
    <triangles material="face" count="1320"> 
      <input semantic="VERTEX" source="#boyShape-skin-vertices" offset="0"/> 
      <input semantic="NORMAL" source="#boyShape-skin-normals" offset="1"/> 
      <input semantic="TEXCOORD" source="#boyShape-skin-map-channel1" offset="2" set="1"/> 
      <p>45 46 60 48 49 62 50 66 63 51 45 56 44 61 57 45 58 58 46 58 58 46 65 59 47 45 56 44 46 60 48 67 61 49 58 58 46 58 58 46 61 57 45 46 60 48 49 62 50 66 63 51 </p> 
    </triangles> 
    <triangles material="face" count="1540"> 
      <input semantic="VERTEX" source="#boyShape-skin-vertices" offset="0"/> 
      <input semantic="NORMAL" source="#boyShape-skin-normals" offset="1"/> 
      <input semantic="TEXCOORD" source="#boyShape-skin-map-channel1" offset="2" set="1"/> 
      <p>58 46 58 58 46 65 59 47 45 56 44 61 57 45 58 58 46 58 58 46 65 59 47 45 56 44 46 60 48 67 61 49 58 58 46 58 58 46 61 57 45 46 60 48 49 62 50 66 63 51 </p> 
    </triangles> 
    </mesh> 

Java代碼是

for(int s=0; s<mesh.getLength() ; s++){ 
    Node firstPersonNode = mesh.item(s); 
    System.out.println(mesh.item(s).getNodeName() + " Test"); 
    if(firstPersonNode.getNodeType() == Node.ELEMENT_NODE){ 
     Element firstPersonElement = (Element)firstPersonNode; 
     NodeList source = firstPersonElement.getElementsByTagName("triangles");  
     System.out.println(source.getLength() + "Source Length"); 
     Node firstsource = source.item(1); // triangles index given here 
     if(firstsource.getNodeType() == Node.ELEMENT_NODE){ 
      Element firstPersonElement1 = (Element)firstsource; 
      System.out.println(firstPersonElement1.getAttribute("id") + " --> <-- "); 
      NodeList floatarray = firstPersonElement1.getElementsByTagName("p"); 
      Element firstNameElement = (Element)floatarray.item(0); 
      NodeList textFNList = firstNameElement.getChildNodes(); 
      System.out.println("Vertexes : " + ((Node)textFNList.item(0)).getNodeValue().trim()); 
     } 
    } 
} 

我試圖解析其位於內部三角形節點的輸入和P,但是,我有一個問題。 問題是當我在上面提到的代碼中將索引指定爲1時,所有子節點都被檢測到並被解析。除1之外,它甚至不檢測子節點輸入和p。可能是什麼問題?請幫我解決這個問題。

+0

你用什麼XML API來編寫代碼?編輯:想通了,簡單的DOM解析器。 'mesh'是'NodeList'的一個實例。 – 2012-07-27 07:57:43

+0

是的,我用過簡單的DOM解析器。 – Vinay 2012-07-27 08:08:24

回答

0

下面是你可以使用DOM API解析您的文檔:

NodeList triangles = document.getElementsByTagName("triangles"); 
    System.out.println("triangles: " + triangles.getLength()); 

    for (int i = 0; i < triangles.getLength(); i++) { 
     Element triangle = (Element) triangles.item(i); 
     System.out.println("triangle: material=" + triangle.getAttribute("material") + " count=" + triangle.getAttribute("count")); 

     NodeList inputs = triangle.getElementsByTagName("input"); 
     for (int j = 0; j < triangles.getLength(); j++) { 
      Element input = (Element) inputs.item(j); 
      System.out.println(" input: semantic=" + input.getAttribute("semantic")); 
     } 

     Element vertices = (Element) triangle.getElementsByTagName("p").item(0); 
     System.out.println(" vertices: " + vertices.getTextContent().trim()); 
    }