Как преобразовать данные XML в объекте Java с помощью JAXB? - PullRequest
0 голосов
/ 15 мая 2019

Я новичок в преобразовании JAXB.Мой тег начинается с <DataSet>, но мне нужно получить доступ к данным из <TABLE> в теге <NewDataSet>.Любое точное предложение или Помогите мне, если что-то не так.

Также я пробовал конвертацию лотов, но не могу найти точное решение.

<?xml version="1.0" encoding="utf-8"?> <DataSet xmlns="http://www.test.com"> <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="Table"> <xs:complexType> <xs:sequence> <xs:element name="ID" type="xs:decimal" minOccurs="0" /> <xs:element name="NAME" type="xs:string" minOccurs="0" /> <xs:element name="ADDRESS" type="xs:string" minOccurs="0" /> <xs:element name="PIN" type="xs:decimal" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema> <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> <NewDataSet xmlns=""> <Table diffgr:id="Table1" msdata:rowOrder="0"> <ID>1</ID> <NAME>Rajesh</NAME> <ADDRESS>Pune</ADDRESS> <PIN>412411</PIN> </Table> <Table diffgr:id="Table2" msdata:rowOrder="1"> <ID>2</ID> <NAME>Ajinkya</NAME> <ADDRESS>Mumbai</ADDRESS> <PIN>412504</PIN> </Table> </NewDataSet> </diffgr:diffgram> </DataSet>

Мой код Java -

File file = new File("/home/raj/Desktop/info.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(NewDataSet.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
NewDataSet dType = (NewDataSet) unmarshaller.unmarshal(file);

Получение следующего исключения:

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"DataSet"). Expected elements are <{}NewDataSet>

1 Ответ

0 голосов
/ 15 мая 2019

Просто пытаюсь помочь.Если у вас уже есть точный класс Data для результата после конвертации из xml.Я рекомендую вам прочитать эту хорошую статью от dzon: Использование JAXB для XML с Java

Вот примеры кодов для преобразования из xml в класс данных:

    File file = new File("product.xml");
    JAXBContext jaxbContext = JAXBContext.newInstance(Product.class);
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    product = (Product) unmarshaller.unmarshal(file);
    System.out.println(product);

Если это пользовательский XML, то я думаю, что вы должны использовать HTML-дом, чтобы конвертировать его вручную.Вот пример использования html dom: Java Read XML - Пример анализатора Java DOM

Вот пример кода использования синтаксического анализа dom из XML в Java:

//Get Document Builder
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();

//Build Document
Document document = builder.parse(new File("employees.xml"));

//Normalize the XML Structure; It's just too important !!
document.getDocumentElement().normalize();

//Here comes the root node
Element root = document.getDocumentElement();
System.out.println(root.getNodeName());

//Get all employees
NodeList nList = document.getElementsByTagName("employee");
System.out.println("============================");

for (int temp = 0; temp < nList.getLength(); temp++)
{
 Node node = nList.item(temp);
 System.out.println("");    //Just a separator
 if (node.getNodeType() == Node.ELEMENT_NODE)
 {
    //Print each employee's detail
    Element eElement = (Element) node;
    System.out.println("Employee id : "    + eElement.getAttribute("id"));
    System.out.println("First Name : "  + eElement.getElementsByTagName("firstName").item(0).getTextContent());
    System.out.println("Last Name : "   + eElement.getElementsByTagName("lastName").item(0).getTextContent());
    System.out.println("Location : "    + eElement.getElementsByTagName("location").item(0).getTextContent());
 }
}
...