使用Java

时间:2015-12-07 08:13:26

标签: java regex xml

从Java中提取XML数据的最简单方法是什么? XML数据始终采用以下形式:

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<groups>GROUPNAME</groups>

我想要做的就是在字符串中捕获组名。 我尝试过使用正则表达式,但我很难编写模式代码:

String xmlline = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<groups>XWiki.G_SW_DEV</groups>";
String pattern = "";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(xmlline);
if(m.find()){
    ....                     
}

如下所述: http://www.tutorialspoint.com/java/java_regular_expressions.htm

关于模式代码的任何建议还是有更好的方法来提取XML数据?

4 个答案:

答案 0 :(得分:1)

经典建议:不要使用正则表达式。开始时似乎很容易,但这并不容易。

并且有很多用于XML的经典库,它们做得很好!

看到这个: Java:XML Parser

然后,你只需要这样做来检索元素:

doc.getElementsByTagName("groups")

getElementsByTagName

,等等

doc.getElementsByTagName("method").item(0).getTextContent() 

答案 1 :(得分:0)

使用JAXB编组

示例:如果要读取customer.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="100">
    <age>29</age>
    <name>Martin</name>
</customer>

步骤1:将xml映射到类文件

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Customer {

String name;
int age;
int id;

public String getName() {
    return name;
}

@XmlElement
public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

@XmlElement
public void setAge(int age) {
    this.age = age;
}

public int getId() {
    return id;
}

@XmlAttribute
public void setId(int id) {
    this.id = id;
}

}

Step 2: Write a reader class


import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

public class ReadXml {

    public static void main(String[] args) throws JAXBException {
        File file = new File("D:\\customer.xml");
        JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);

        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        Customer customer = (Customer) jaxbUnmarshaller.unmarshal(file);

        System.out.println("Name :" + customer.getName());
        System.out.println("Age :" + customer.getAge());
        System.out.println("Id :" + customer.getId());

}

}


output:

Name :Martin
Age :29
Id :100

答案 2 :(得分:0)

在Java生态系统中存在三种不同的xml-parser方法。其中两个是基于流的,与事件一起工作。第三个使用文档的树模型(DOM->文档对象模型)。 流模型适用于大型文档,而DOM解析器通常被认为更容易/更好地编程。

流/事件:

  • SAX(XML的简单API) - &gt;您可以实现可以对某些事件做出反应的DocumentHandler。 &#34;推送&#34; -Parser,因为它推动&#34;您的处理程序的事件。
  • StAX(用于XML的流API) - &gt; &#34; Pull&#34; -Parser,您必须从解析器中获取下一个事件并对其做出反应。

另请参阅:this question

DOM:

查看Oracle Tutorial

答案 3 :(得分:-3)

了解JRXML以从XML文件中检索数据。这是在java中使用的最好的东西。否则,如果你不使用它,就有很多鱼可以炒。