2015-12-07 35 views
1

在Java中從XML抽取數據的最簡單方法是什麼? XML數據總是在形式:使用Java從XML抽取數據的簡單方法

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

和所有我想要做的就是捕捉組名中的字符串。 我使用正則表達式試過,但我struggleing寫的模式代碼:

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數據?

+2

利用圖書館。如果您的家中已經有螺絲刀,您不會用錘子驅動螺絲釘;-) –

回答

-2

瞭解JRXML以從XML文件中檢索數據。這是在java中使用的最好的東西。否則,如果你不使用這些,有很多魚可以炒。

+0

JRXML是JasperReports中唯一使用的格式(儘管是有效的XML)。這將如何幫助解決OP問題? –

+0

它也用於JasperReports之外。 –

+0

請參閱http://www.gontu.org以查看關於JRXML的視頻教程。這些都是免費的。 –

1

古典忠告:不要使用正則表達式。開始看起來很簡單,但並不容易。

並且有很多經典的XML庫可以很好地完成它!

看到這一點: Java:XML Parser

,然後,你只需要做到這一點檢索要素:

doc.getElementsByTagName("groups") 

getElementsByTagName

和類似的東西

doc.getElementsByTagName("method").item(0).getTextContent() 
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 
0

在Java生態系統存在三種不同的xml解析器方法。其中兩個是基於流的,與事件一起工作。第三個使用文檔的樹模型(DOM - >文檔對象模型)。 流模型適用於大型文檔,而DOM解析器通常被認爲是更容易/更好的編程。


流/事件:

  • SAX(用於XML的簡單API) - >您可以實現的DocumentHandler可以對某些事件做出反應。 「Push」--Parser,因爲它將事件「推送」給你的處理程序。
  • StAX(用於XML的Stream API) - >「Pull」-Parser,您必須從解析器中獲取下一個事件並對其作出反應。

參見:this question

DOM:

看看像XPath或類似的,而不是正則表達式Oracle Tutorial