Java获取XML节点

时间:2017-12-29 13:06:11

标签: java xml

我想获得前两位服务作者的名字。

我有以下XML示例:

<ServiceSchema:id>10</ServiceSchema:id>
<ServiceSchema:name>Service 10</ServiceSchema:name>
<ServiceSchema:authorInfos>
    <ServiceSchema:authorInfo>
        <ServiceSchema:id>1</ServiceSchema:id>
        <ServiceSchema:name>Service Author 1</ServiceSchema:name>
    <ServiceSchema:authorInfo>
    <ServiceSchema:authorInfo>
        <ServiceSchema:id>2</ServiceSchema:id>
        <ServiceSchema:name>Service Author 2</ServiceSchema:name>
    <ServiceSchema:authorInfo>
</ServiceSchema:authorInfos>

<ServiceSchema:requirements>
    <ServiceSchema:requirement>
        <ServiceSchema:id>1</ServiceSchema:id>
        <ServiceSchema:name>Requirement 1</ServiceSchema:name>
        <ServiceSchema:authorInfos>
            <ServiceSchema:authorInfo>
                <ServiceSchema:id>5</ServiceSchema:id>
                <ServiceSchema:name> Requirement Author 5</ServiceSchema:name>
            <ServiceSchema:authorInfo>
        </ServiceSchema:authorInfos>
    </ServiceSchema:requirement>
.....

我可以使用以下代码获取所有名称节点:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource inputSource = new InputSource(new ByteArrayInputStream (xml.getBytes("utf-8")));
Document xmldocument = db.parse(inputSource);
NodeList nodeList = xmldocument.getElementsByTagNameNS("*", "name");

但我不知道如何只获得外部作者的名字。

谢谢。

更新

我想要完全做的是: 我搜索不同节点的不同xml文件。上面的xml文件就是一个例子。

例如:

searchElementsXml = new String[]{"name", "id", "version", "description", "keywords", "authorInfos.authorInfo.name", "status"};

我有一些字段可能会出现很多值。就像作者信息一样。

所以我需要这样的东西:

NodeList nodes = doc.getElementsByTagName("ServiceSchema:authorInfos:authorinfo:name");

那里有一个很好的解决方案吗?

3 个答案:

答案 0 :(得分:0)

如果我已正确理解您的需求,我建议您获取所有作者信息(ServiceSchema:authorInfo),然后获取每个authorInfo的名称节点。

答案 1 :(得分:0)

您的XML是否正确我无法看到ServiceSchema:authorInfo标记正在关闭
能否请您更新输出内容。获取authorsInfos您可以使用以下代码 NodeList nodes = doc.getElementsByTagName(“ServiceSchema:authorInfos”);

她是详细执行代码

File fXmlFile = new File("/Users/Downloads/test.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nodes = doc.getElementsByTagName("ServiceSchema:authorInfos");
for (int temp = 0; temp < nodes.getLength(); temp++) {
    Node nNode = nodes.item(temp);
    System.out.println(" Current Author Element :" + nNode.getNodeName());
    if (nNode.getNodeType() == Node.ELEMENT_NODE) {
        Element eElement = (Element) nNode;
        System.out.println("Author Info Name : " + eElement.getElementsByTagName("ServiceSchema:authorInfo").getLength());
    }
}

答案 2 :(得分:-1)

我最终按照其他人的建议使用了xpath。效果很好-