Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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
使用jaxb将xml解析为java对象时接收错误_Java_Xml_Jaxb_Xsd - Fatal编程技术网

使用jaxb将xml解析为java对象时接收错误

使用jaxb将xml解析为java对象时接收错误,java,xml,jaxb,xsd,Java,Xml,Jaxb,Xsd,使用xjc,我从下面的xml生成了下面的java类 xjc命令: xjc-p sample.xsd 从sample.xml生成的xsd文件: <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://rssnamespace.org/feedburner/ext/1.0" xml

使用xjc,我从下面的xml生成了下面的java类

xjc命令:

xjc-p sample.xsd

从sample.xml生成的xsd文件:

<xs:schema attributeFormDefault="unqualified" 
           elementFormDefault="qualified" 
           targetNamespace="http://rssnamespace.org/feedburner/ext/1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="origLink" type="xs:anyURI"/>
  <xs:element name="info">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute type="xs:string" name="uri"
                        use="optional"/>
          <xs:attribute type="xs:string" name="rel" 
                        use="optional"/>
          <xs:attribute type="xs:anyURI" name="href" 
                        use="optional"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
</xs:schema>
<?xml version=\\\"1.0\" encoding=\\\"UTF-8\"\\?>
<?xml-stylesheet type="text/xsl" media="screen\" href=\"/~d/styles/rss2full.xsl\"?>
<?xml-stylesheet type="text/css" media="screen\" href=\"http://feeds.arsenal.com/~d/styles/itemcontent.css"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/\" xmlns:feedburner=\"http://rssnamespace.org/feedburner/ext/1.0" version=\"2.0\">
   <channel>
      <title><![CDATA[Arsenal FC News Feed]]></title>
      <link>http://feeds.arsenal.com/arsenal-news</link>
      <description><![CDATA[Arsenal FC News Headlines]]></description>
      <pubDate>Thu, 05 Dec 2013 16:05:34 +0000</pubDate>
      <managingEditor>website@arsenal.co.uk (Arsenal)</managingEditor>
      <copyright>Copyright(C) 2013 Arsenal Broadband Ltd</copyright>
      <generator>Arsenal</generator>
      <language>en-gb</language>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs>
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.arsenal.com/arsenal-news" />
      <feedburner:info uri="arsenal-news" />
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />
      <item>
         <title><![CDATA[Peter Hill-Wood honoured by the Club]]></title>
         <link>http://feeds.arsenal.com/~r/arsenal-news/~3/OZfGaLyOb9I/former-arsenal-chairman-honoured-by-club</link>
         <guid isPermaLink="false">http://www.arsenal.com/50466</guid>
         <description>Bust of former Arsenal chairman unveiled at Emirates Stadium in commemoration of his contribution to the Club&lt;img src="http://feeds.feedburner.com/~r/arsenal-news/~4/OZfGaLyOb9I" height="1" width="1"/&gt;</description>
         <pubDate>Thu, 05 Dec 2013 16:05:34 +0000</pubDate>
         <feedburner:origLink>http://www.arsenal.com/news/news-archive/former-arsenal-chairman-honoured-by-club</feedburner:origLink>
      </item>
   </channel>
</rss>
但我收到了这个错误:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://rssnamespace.org/feedburner/ext/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="origLink" type="xs:anyURI"/>
  <xs:element name="info">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute type="xs:string" name="uri" use="optional"/>
          <xs:attribute type="xs:string" name="rel" use="optional"/>
          <xs:attribute type="xs:anyURI" name="href" use="optional"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
</xs:schema>
javax.xml.bind.UnmarshaleException:意外元素(uri:,local:“rss”)。预期要素包括:,
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:647)
我的java对象正确吗

更新:我用来生成XSD模式:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?>
<?xml-stylesheet type="text/css" media="screen" href="http://feeds.arsenal.com/~d/styles/itemcontent.css"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
   <channel>
      <title><![CDATA[Arsenal FC News Feed]]></title>
      <link>http://feeds.arsenal.com/arsenal-news</link>
      <description><![CDATA[Arsenal FC News Headlines]]></description>
      <pubDate>Thu, 05 Dec 2013 16:05:34 +0000</pubDate>
      <managingEditor>website@arsenal.co.uk (Arsenal)</managingEditor>
      <copyright>Copyright(C) 2013 Arsenal Broadband Ltd</copyright>
      <generator>Arsenal</generator>
      <language>en-gb</language>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs>
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.arsenal.com/arsenal-news" />
      <feedburner:info uri="arsenal-news" />
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />
      <item>
         <title><![CDATA[Peter Hill-Wood honoured by the Club]]></title>
         <link>http://feeds.arsenal.com/~r/arsenal-news/~3/OZfGaLyOb9I/former-arsenal-chairman-honoured-by-club</link>
         <guid isPermaLink="false">http://www.arsenal.com/50466</guid>
         <description>Bust of former Arsenal chairman unveiled at Emirates Stadium in commemoration of his contribution to the Club&lt;img src="http://feeds.feedburner.com/~r/arsenal-news/~4/OZfGaLyOb9I" height="1" width="1"/&gt;</description>
         <pubDate>Thu, 05 Dec 2013 16:05:34 +0000</pubDate>
         <feedburner:origLink>http://www.arsenal.com/news/news-archive/former-arsenal-chairman-honoured-by-club</feedburner:origLink>
      </item>
   </channel>
</rss>

从这个XML:

import org.w3c.dom.*;
import org.xml.sax.InputSource;
import javax.xml.xpath.*;
import javax.xml.parsers.*;

public class XmlParser {
 public static void main(String[] args) {
 try {
  DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
  domFactory.setNamespaceAware(true);
  DocumentBuilder builder = domFactory.newDocumentBuilder();
  URL url = new URL("http://www.somesite.com/index.php?format=feed&type=rss");
  InputStream inputStream = url.openStream();
  Reader reader = new InputStreamReader(inputStream, "UTF-8");
  InputSource inputSource = new InputSource(reader);
  Document doc = builder.parse(inputSource);
  XPath xpath = XPathFactory.newInstance().newXPath();
  XPathExpression expr = xpath.compile("//rss/channel/item/title/text()");
  NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);
   for (int i = 0; i < nodes.getLength(); i++)
   {
    String title = nodes.item(i).getNodeValue();
    System.out.println(title);
   }
  }
  catch (Exception exception) {
   exception.printStackTrace();
  }
 }
}

http://feeds.arsenal.com/arsenal-news
2013年12月5日星期四16:05:34+0000
website@arsenal.co.uk(阿森纳)
版权所有(C)2013阿森纳宽带有限公司
武器
英国英语
http://blogs.law.harvard.edu/tech/rss
使用xpath进行解析似乎要简单得多:

<info 
    xmlns="http://rssnamespace.org/feedburner/ext/1.0"
    url="A"
    rel="B"
    fref="http://www.example.com"/>
导入org.w3c.dom.*; 导入org.xml.sax.InputSource; 导入javax.xml.xpath.*; 导入javax.xml.parsers.*; 公共类XmlParser{ 公共静态void main(字符串[]args){ 试一试{ DocumentBuilderFactory domFactory=DocumentBuilderFactory.newInstance(); domFactory.setNamespaceAware(true); DocumentBuilder=domFactory.newDocumentBuilder(); URL=新URL(“http://www.somesite.com/index.php?format=feed&type=rss"); InputStream InputStream=url.openStream(); Reader Reader=新的InputStreamReader(inputStream,“UTF-8”); InputSource InputSource=新的InputSource(读卡器); 文档doc=builder.parse(inputSource); XPath=XPathFactory.newInstance().newXPath(); XPathExpression expr=xpath.compile(“//rss/channel/item/title/text()”; NodeList节点=(NodeList)expr.evaluate(doc,XPathConstants.NODESET); 对于(int i=0;i
从生成模型的XML模式中,JAXB希望看到如下文档:

<origLink>http://www.example.com</origLink>

http://www.example.com

如果您希望对不符合此XML架构的XML文档(如
sample.XML
)进行解组,则需要创建另一个映射到该XML文档结构的模型。

您正在解析的XML文档与您从中生成类的架构不匹配。你在寻找什么行为?@Blaise Doughan我正在尝试将XML文件解析为java对象。这是否意味着命令xjc-PSAMPLE sample.xsd没有生成正确的java类格式?xjc需要一个描述您试图读取的XML的模式,以便它可以创建适当的对象。您试图读取包含
rss
元素的XML;xjc为您提供了准备阅读feedburner:info和feedburner:origLink元素的类。我认为您意外地得到了架构的一部分,但不是全部。XJC需要了解所有信息。请参阅问题更新,这是否意味着从生成的xsd架构不正确?
import org.w3c.dom.*;
import org.xml.sax.InputSource;
import javax.xml.xpath.*;
import javax.xml.parsers.*;

public class XmlParser {
 public static void main(String[] args) {
 try {
  DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
  domFactory.setNamespaceAware(true);
  DocumentBuilder builder = domFactory.newDocumentBuilder();
  URL url = new URL("http://www.somesite.com/index.php?format=feed&type=rss");
  InputStream inputStream = url.openStream();
  Reader reader = new InputStreamReader(inputStream, "UTF-8");
  InputSource inputSource = new InputSource(reader);
  Document doc = builder.parse(inputSource);
  XPath xpath = XPathFactory.newInstance().newXPath();
  XPathExpression expr = xpath.compile("//rss/channel/item/title/text()");
  NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);
   for (int i = 0; i < nodes.getLength(); i++)
   {
    String title = nodes.item(i).getNodeValue();
    System.out.println(title);
   }
  }
  catch (Exception exception) {
   exception.printStackTrace();
  }
 }
}
<info 
    xmlns="http://rssnamespace.org/feedburner/ext/1.0"
    url="A"
    rel="B"
    fref="http://www.example.com"/>
<origLink>http://www.example.com</origLink>