gpt4 book ai didi

java - 如何在 Java 中使用具有相同名称的标签迭代 XML

转载 作者:行者123 更新时间:2023-12-02 09:49:16 24 4
gpt4 key购买 nike

我正在尝试使用 DOM-Library 在 Java 中迭代这个 xml 文件(必须使用它),到目前为止,我已经能够通过直接以这种方式请求它来获取某些元素:

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>

最佳答案

document.getElementsByTagName(tagname)搜索文档中包含的所有元素。

element.getElementsByTagName(name)搜索所有后代元素,即仅搜索给定元素的子树。

所以你可以这样做:

NodeList sphereList = document.getElementsByTagName("sphere");
for (int i = 0; i < sphereList.getLength(); i++) {
Element sphereElem = (Element) sphereList.item(i);
Element positionElem = (Element) sphereElem.getElementsByTagName("position").item(0);

double radius = Double.parseDouble(sphereElem.getAttribute("radius"));
double x = Double.parseDouble(positionElem.getAttribute("x"));
double y = Double.parseDouble(positionElem.getAttribute("y"));
double z = Double.parseDouble(positionElem.getAttribute("z"));

// use values here
}

关于java - 如何在 Java 中使用具有相同名称的标签迭代 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56431233/

24 4 0