Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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,我想用JAVA阅读我的XML <?xml version="1.0" encoding="UTF-8"?> <myapp version="1.0"> <photo_information> <date>2016/08/20</date> <time>17:21:59</time> <user_data></user_data> <prints>1<

我想用JAVA阅读我的XML

   <?xml version="1.0" encoding="UTF-8"?>
<myapp version="1.0">
<photo_information>
  <date>2016/08/20</date>
  <time>17:21:59</time>
  <user_data></user_data>
  <prints>1</prints>
  <photos>
    <photo image="1">IMG_0001.JPG</photo>
    <photo image="2">IMG_0002.JPG</photo>
    <photo image="3">IMG_0003.JPG</photo>
    <photo image="4">IMG_0004.JPG</photo>
    <output>prints\160820_172159.jpg</output>
  </photos>
</photo_information>
</myapp>

最好的方法是创建一个模式,并使用JAXB将传入的XML解组到java对象中,然后像POJO一样读取它

如果你不知道如何创建模式,那么你可以使用一些在线工具获得帮助-

然后必须使用ANT生成Java对象

对!!对于这样一个简单的问题,需要做大量的工作,但这就是在Java中解析XML的方式


记住!!!XML就像一场战争。如果它对您没有帮助,那么很可能您使用得不够。

或者您可以查看库xstream

此库使您能够将对象序列化并反序列化为xml代码

第一步是建模一个包含照片信息所有字段的类。通常你会称之为照片信息:

class PhotoInformation {
   LocalDate date;
   LocalTime time;
   UserData userData;
   int prints;
   Photos photos;
}
此外,还需要创建一些其他类:UserData和Photos

在下一步中,您需要设置xstream的解析器,用xml文件中的内容填充对象。
为此,您可以找到一个教程,或者如果您喜欢注释的话。

使用JAXB解析将是一个更好的选择。要解析它,您必须创建类

//将此添加到pom插件中

    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>1.6</version>
用于解组(解析)文件

通过myapp对象,您将能够访问myapp类中的其余标记,并且您可以进一步迭代照片信息并访问照片


我希望这有帮助

您现在得到的结果是什么?有例外吗?请试着描述一下你的问题是什么不应该允许你在不考虑之前的问题的情况下提出更多的问题-但是这个愚蠢的网站允许这样做但是当你必须解析非常大的XML时,流解析器可能会很有用,因为“将传入的XML解压到java对象中,并像POJO一样读取它”会很慢。你的意思是“多大”和“多长”?考虑到问题中的数据,我认为他不会收到巨大的XML,我提到的方法是标准方法。但根据具体情况,可能会有例外。如果数据很大,延迟很低,那么显然我们有不同的方法。从模式生成java对象的最简单方法是XJC-DSRC-PCom.test.schema schema.xsd,而不是ANT任务。是的。。我的意思是“长”:)没有其他可能性吗?你是什么意思?您需要告诉xstream需要在java对象的哪个字段中写入什么xml值。为此,您需要某种定义代码。这个定义代码可以通过注释或者通过XStreak对象的相应方法来完成?
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>1.6</version>
        @XmlRootElement(name = "myapp")
        class MyApp{
        PhotoInformation[] photoInformation;

        @XmlElement(name = "photo_information")
        public PhotoInformation getPhotoInformation() {
            return individuals;
        }

        public void setPhotoInformation(Individuals photoInformation) {
            this.individuals = individuals;
        }
    }
@XmlRootElement(name= "photo_Information")
class PhotoInformation {
   LocalDate date;
   LocalTime time;
   UserData userData;
   int prints;
   Photos[] photos;
//add getters and setters for the above variables with the @XmlElement Annotations and correct tag name
}

@XmlRootElement(name= "photo")
class Photo{
String photo;
//add getter and setter for the above variables with the @XmlElement Annotations and correct tag name
}
    JAXBContext jaxbContext = JAXBContext.newInstance(MyApp.class);
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
    File XMLfile = new File(folderPath);
    myApp myapp = (myApp) jaxbUnmarshaller.unmarshal(XMLfile);