首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用具有相同名称的标记在Java中遍历XML

如何使用具有相同名称的标记在Java中遍历XML
EN

Stack Overflow用户
提问于 2019-06-04 00:28:12
回答 1查看 652关注 0票数 0

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

代码语言:javascript
复制
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标记,但我似乎找不到一种方法来访问子标记,这不依赖于我手动键入确切的行数。

我需要迭代所有的表面/灯光标签,因为一旦我有了所有的信息,我就在为它收集数据的实例中创建了一个新的曲面/灯光。

代码语言:javascript
复制
<?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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-04 00:59:34

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

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

所以你可以这样做:

代码语言:javascript
复制
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
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56431233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档