我试图解析以下xml.我可以轻松访问WeekNumber但无法访问EmployeeRatesLevelA和EmployeeRatesLevelB的子项.目标是将这些保存到具有字段WeekNumber和ArrayLists,EmployeeRatesLevelA和EmployeeRatesLevelB的类DataSet.谢谢.
<DataSet ActiveFrom="2011/04/06">
<WeekNumber>8</WeekNumber>
<EmployeeRatesLevelA>
<Rate>0</Rate>
<Rate>0.12</Rate>
</EmployeeRatesLevelA>
<EmployeeRatesLevelB>
<Rate>0.15</Rate>
<Rate>0.20</Rate>
</EmployeeRatesLevelB>
</DataSet>
Document doc = loadXml("data.xml");
NodeList nodeList = doc.getElementsByTagName("DataSet");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
NodeList weekNumberList = element.getElementsByTagName("WeekNumber");
Element weekElement = (Element) weekNumberList.item(0);
NodeList textElementList = weekElement.getChildNodes();
System.out.println("Weeknumber:"+ ((Node)textElementList.item(0)).getNodeValue().trim());
}
public static Document loadXml(String file) {
try {
return (DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(file)));
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
这给了我Weeknumber但我无法访问EmployeeRatesLevelA和EmployeeRatesLevelB.
想学习其他很酷的东西,但由于我是Java的新手并且xml文档非常小,DOM应该足够了.
如评论中所述,请向我们展示您的Java代码.您可能还需要考虑查看JAXB - 用于XML绑定的Java体系结构.这特别适合将XML表示为Java对象.无论出于何种原因,您的解决方案可能都不可行,但绝对要看一下:
http://jaxb.java.net/tutorial/
数据集
以下域对象是您在问题中描述的内容:
目标是将这些保存到具有字段WeekNumber和ArrayLists,EmployeeRatesLevelA和EmployeeRatesLevelB的类DataSet.
package forum8345529;
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement(name="DataSet")
@XmlAccessorType(XmlAccessType.FIELD)
public class DataSet {
@XmlElement(name="WeekNumber")
private int weekNumber;
@XmlElementWrapper(name="EmployeeRatesLevelA")
@XmlElement(name="Rate")
private List<Float> employeeRatesLevelA;
@XmlElementWrapper(name="EmployeeRatesLevelB")
@XmlElement(name="Rate")
private List<Float> employeeRatesLevelB;
}
Run Code Online (Sandbox Code Playgroud)
演示
以下代码演示了如何使用JAXB运行时将XML转换为域对象或从域对象转换XML:
package forum8345529;
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception{
JAXBContext jc = JAXBContext.newInstance(DataSet.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum8345529/input.xml");
DataSet dataSet = (DataSet) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(dataSet, System.out);
}
}
Run Code Online (Sandbox Code Playgroud)