Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JAVA中,当父标记和子标记相同时解析XML_Java_Xml - Fatal编程技术网

在JAVA中,当父标记和子标记相同时解析XML

在JAVA中,当父标记和子标记相同时解析XML,java,xml,Java,Xml,快速提问。我有与下面类似的XML <dst_adtr> <dst_adtr> <Name>TEST Name</Name> <Table>objects</Table> </dst_adtr> </dst_adtr> <dst_adtr>

快速提问。我有与下面类似的XML

        <dst_adtr>
           <dst_adtr>
              <Name>TEST Name</Name>
              <Table>objects</Table>
           </dst_adtr>
        </dst_adtr>
        <dst_adtr>
           <dst_adtr>
              <Name>TEST Name TWO</Name>
              <Table>objects</Table>
           </dst_adtr>
        </dst_adtr>

测试名称
物体
测试名称二
物体
正如您所看到的,父标记和子标记是相同的。
我希望能够搜索并提取
标记中的信息。我怎样才能明确地找到Name标记?

如果您的模式总是包含上述格式,那么您可以使用SAX解析器,每次遇到新的dst_adtr节点时,创建一个新的POJO并获取名称和表体信息。如果不想手动解析内容,请使用JAXB。创建一个xsd文件并自动生成POJO和post,您只需调用unmarshall即可从xml提取数据。一个选项是您可以将xml作为字符串读取,并使用正则表达式进行匹配

(?:<Name>(.*?)</Name>)
(?:(.*))


然后,您可以提取所有匹配项。

使用拉式解析器且无外部依赖项的示例:

public void pullParse(InputStream in)
        throws FactoryConfigurationError, XMLStreamException {
    XMLInputFactory factory = XMLInputFactory.newInstance();
    factory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
    XMLEventReader reader = factory.createXMLEventReader(in);

    boolean inName = false;
    while (reader.hasNext()) {
        XMLEvent o = reader.nextEvent();
        if (inName && o.isCharacters()) {
            System.out.println("name: " + o.asCharacters().getData());
        } else if (inName && o.isEndElement()
                && "Name".equals(o.asEndElement().getName().toString())) {
            inName = false;
        }
        if (o.isStartElement()
                && "Name".equals(o.asStartElement().getName().toString())) {
            inName = true;
        }
    }
}