java - 如何在 Java、XML 文件中显示具有特定 id 和标签名称以及特定父节点下的节点的值?

标签 java xml

我想显示 XML 文件中名称为“user2”且 id=“a1”的 Java 节点的值,这些节点是名称为“user1”的节点的子节点,这是我尝试过的代码,但我是无法完成。

例如,我只想显示值 <user1><user2 id="a1"> </user2> </user1> ,其父节点为 user1,子节点为 user2,id 为“a1”。

XML

    <?xml version="1.0" encoding="UTF-8"?>
    <users>
        <user1>
            <user2 id="a1">adil</user2>
            <user2>bilal</user2>
            <user2 id="a1">chand</user2>
        </user1>
        <user2>d</user2>
        <user2 id="a1">elijah</user2>
        <user1 id="a1">
            <user3>
                <user2 id="a1">farhan</user2>
            </user3>
            <user2>grahm</user2>
            <user2 id="a1">haris</user2>
        </user1>
    </users>

我的Java代码:

    package myApp;

    import java.util.Objects;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;

    public class MainActivity {

        public static void main(String[] args) {

            // TODO Auto-generated method stub
            try {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse("Solve.xml");
    doc.getDocumentElement().normalize();

    System.out.println("Root element: " + doc.getDocumentElement().getNodeName());
    NodeList nList = doc.getElementsByTagName("user1");
    for (int i = 0; i < nList.getLength(); i++) {

        Node nNode = nList.item(i);

        System.out.println("\nCurrent Element: " + nNode.getNodeName());

        if (nNode.getNodeType() == Node.ELEMENT_NODE) {
            Element elem = (Element) nNode;
            String uid = elem.getAttribute("id");
            Node node1 = elem.getElementsByTagName("user2").item(0);
            String firstX2 = node1.getTextContent();       
            Node node2 = elem.getElementsByTagName("user2").item(1);
            String secondX2 = node2.getTextContent();
            Node node3 = elem.getElementsByTagName("user2").item(2);
            String thirdX2 = node3.getTextContent();
            System.out.printf("First name: %s%n", firstX2);
           System.out.printf("Last name: %s%n", secondX2);
           System.out.printf("Last name: %s%n", thirdX2); 
        }
        }
        }
        catch(Exception e)
            {

            }
    }
    }

最佳答案

欢迎来到 stackoverflow!

这是一个较小的解决方案:

    Document doc = DocumentBuilderFactory.newInstance()
            .newDocumentBuilder()
            .parse("Solve.xml");

    XPath xp = XPathFactory.newInstance().newXPath();

    NodeList list = (NodeList) xp.evaluate("//user1/user2[@id = 'a1']", doc, XPathConstants.NODESET);
    for(int i=0; i < list.getLength(); ++i) {
        Element user2 =  (Element) list.item(i);
        System.out.println("user2 = " + user2.getTextContent());
    }

关于java - 如何在 Java、XML 文件中显示具有特定 id 和标签名称以及特定父节点下的节点的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59205839/

相关文章:

java - NetBeans:如何选择驻留在 JFrame 内的 JLabel?

java - 二进制到十进制转换

java - 传递关系 : What is x. equals(z) 当 x.equals(y) 为假且 y.equals(z) 为真时

Java 验证仅针对字符串值集添加约束

java - 如何从 XML 转换为 Java,反之亦然?

android - 在 RelativeLayout 中居中 EditText View

java - 打包域类上下文中的丰富域

php - SimpleXML 动态属性

xml - 在 R XML Xpath 中,@href 返回文本 "href"

java - Android 单击小部件时启动新 Activity