java 如何读取特定元素的 XML 子节点值?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12413443/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 08:47:55  来源:igfitidea点击:

How to read XML child node values of specific element?

javaxmldomxml-parsing

提问by user1652549

I am trying to read child node value with attribute value of a specific element using DOM parser.. My xml file:

我正在尝试使用 DOM 解析器读取具有特定元素的属性值的子节点值。我的 xml 文件:

    <?xml version="1.0" encoding="UTF-8"?>
<RootNode>
    <SubNode Sid="1">
        <title>some text</title>
        <data dId="1">some text</data>
        <data dId="2">some text</data>
        <ExData>1</ExData>
    </SubNode>
    <SubNode Sid="2">
        <title>some text</title>
        <data dId="1">some text</data>
        <data dId="2">some text</data>
        <data dId="3">some text</data>
        <data dId="4">some text</data>
        <data dId="5">some text</data>
        <ExData>1</ExData>
    </SubNode>
    <SubNode Sid="3">
        <title>some text</title>
        <data dId="1">some text</data>
        <data dId="2">some text</data>
        <data dId="3">some text</data>
        <ExData>1</ExData>
    </SubNode>
</RootNode>

i am trying to read datanodes value of a one SubNode. i have checked with below code:

我正在尝试读取一个data节点的值SubNode。我已经检查了以下代码:

private void parseDocument()
{
    Element docEle = dom.getDocumentElement();
    NodeList nl = docEle.getElementsByTagName("SubNode");
    if(nl!= null && nl.getLength()>0)
    {
        for(int i=0; i<nl.getLength();i++)
        {
            Element el = (Element)nl.item(i);
            InfoBean que = getInfoBean(el);
            InfoBeanSet.add(que);
        }
    }
}
private InfoBean getInfoBean(Element el)
{
    int sId = Integer.parseInt(el.getAttribute("Sid"));
    String title = getTextValue(el,"title");    

    NodeList SingleOptionNode = el.getElementsByTagName("data");
    int nodeLen = SingleOptionNode.getLength();
    if(SingleOptionNode != null && nodeLen>0)
    {
        for(int i=0; i<nodeLen; i++)
        {
            Element el1 = (Element)SingleOptionNode.item(i);
            NodeList nextOption = el1.getChildNodes();
            Node currentNode = (Node) nextOption.item(0);
            int dId = Integer.parseInt(el1.getAttribute("dId"));
            String data = currentNode.getNodeValue();
            opt.add(new Option(data, dId));
        }
    }
    String ExData = getTextValue(el,"ExData");
    InfoBean ifb = new InfoBean(sId,title,opt,ExData);
    return ifb;
}

it gives data node values of all 3 SubNodes. how to read one SubNode element child node values with attribute value. Can i know the reason why am getting all data node value? can i get some code examples how to read data node value of a one SubNode element.. Any help would appreciated.

它给出了所有 3 个子节点的数据节点值。如何使用属性值读取一个 SubNode 元素的子节点值。我能知道获取所有数据节点值的原因吗?我可以得到一些代码示例如何读取一个子节点元素的数据节点值.. 任何帮助将不胜感激。

回答by Paul Butcher

This line introduces a loop over all of the SubNode elements in your node list.

此行在节点列表中的所有 SubNode 元素上引入了一个循环。

   for(int i=0; i<nl.getLength();i++)

Try not doing that.

尽量不要那样做。