Я пытаюсь перебрать этот xml-файл в Java, используя DOM-библиотеку (должен его использовать), и до сих пор мне удавалось получить определенные элементы, просто запросив его таким образом:
NodeList pList = document.getElementsByTagName("position");
Node pNode = pList.item(0);
Element pElement = (Element) pNode;
double xp = Double.parseDouble(pElement.getAttribute("x"));
double yp = Double.parseDouble(pElement.getAttribute("y"));
double zp = Double.parseDouble(pElement.getAttribute("z"));
но это больше не работает, когда я хочу получить доступ к элементам, которые могут иметь несколько тегов. например, если бы я добавил больше сфер, было бы больше тегов, помеченных как сфера.
Я пытался перебрать тэг Sphere / Lights, но, похоже, я не нашел способа доступа к подтегу, который бы не зависел от того, чтобы я вручную набирал точное количество строк.
Мне нужно выполнить итерации по всем поверхностным / световым меткам, поскольку, получив всю информацию, я создаю новую поверхность / источник света в случае сбора данных для нее.
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE scene SYSTEM "scene.dtd">
<scene output_file="example1.png">
<background_color r="0.0" g="0.0" b="0.0"/>
<camera>
<position x="0.0" y="0.0" z="1.0"/>
<lookat x="0.0" y="0.0" z="-2.5"/>
<up x="0.0" y="1.0" z="0.0"/>
<horizontal_fov angle="45"/>
<resolution horizontal="512" vertical="512"/>
<max_bounces n="8"/>
</camera>
<lights>
<ambient_light>
<color r="1.0" g="1.0" b="1.0"/>
</ambient_light>
</lights>
<surfaces>
<sphere radius="1.0">
<position x="-2.1" y="0.0" z="-3.0"/>
<material_solid>
<color r="0.17" g="0.18" b="0.50"/>
<phong ka="0.3" kd="0.9" ks="1.0" exponent="200"/>
<reflectance r="0.0"/>
<transmittance t="0.0"/>
<refraction iof="2.3"/>
</material_solid>
</sphere>
<sphere radius="1.0">
<position x="0.0" y="0.0" z="-3.0"/>
<material_solid>
<color r="0.5" g="0.17" b="0.18"/>
<phong ka="0.3" kd="0.9" ks="1.0" exponent="200"/>
<reflectance r="0.0"/>
<transmittance t="0.0"/>
<refraction iof="2.3"/>
</material_solid>
</sphere>
<sphere radius="1.0">
<position x="2.1" y="0.0" z="-3.0"/>
<material_solid>
<color r="0.18" g="0.50" b="0.17"/>
<phong ka="0.3" kd="0.9" ks="1.0" exponent="200"/>
<reflectance r="0.0"/>
<transmittance t="0.0"/>
<refraction iof="2.3"/>
</material_solid>
</sphere>
</surfaces>
</scene>