2013-07-11 47 views
-1

这是我的家庭任务。我不明白它对我的要求,以及它为什么不起作用。它在reader.next()上失败。路径是正确的。这里有StAXParser了Java代码:StAX解析器内容不允许在序言中

public class StAXParser { 

private Dances dances; 
private Dance currentDance; 
private Dancer currentDancer; 

public static void main(String[] args) { 
    StAXParser stAXParser = new StAXParser(); 
    stAXParser.parse("DanceGroupConcerts.xml"); 
} 

public Dances getDances() { 
    return dances; 
} 

public StAXParser() { 
} 

public void parse (String xmlFileName){ 
    try { 
     XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(xmlFileName)); 
     int tag; 
     String tagName; 
     String text = new String(); 
     while (reader.hasNext()){ 
      tag = reader.next(); 

      switch (tag){ 
       case XMLStreamReader.START_ELEMENT: 

        tagName = reader.getLocalName(); 

        if (tagName == "Dances") 
         dances = new Dances(); 
        if (tagName.equals("Dance")) 
         currentDance = new Dance(); 
        if (tagName.equals("Dancer")) 
         currentDancer = new Dancer(); 
        break; 

       case XMLStreamReader.CHARACTERS: 
        text = reader.getText(); 
        break; 

       case XMLStreamReader.END_ELEMENT: 

        tagName = reader.getLocalName(); 

        if (tagName.equals("Dancer")) 
         currentDance.getDancers().add(currentDancer); 
        if (tagName.equals("Dance")) 
         dances.getDance().add(currentDance); 
        if (tagName.equals("Type")) 
         currentDance.setType(text); 
        if (tagName.equals("Scene")) 
         currentDance.setScene(text); 
        if (tagName.equals("NumberOfDancers")) 
         currentDance.setNumberOfDancers(NumberOfDancers.fromValue(text)); 
        if (tagName.equals("Music")) 
         currentDance.setMusic(Music.fromValue(text)); 
        if (tagName.equals("Name")) 
         currentDancer.setName(text); 
        if (tagName.equals("DanceTeam")) 
         currentDancer.setNameOfDanceTeam(text); 
        if (tagName.equals("Age")) 
         currentDancer.setAge(BigInteger.valueOf(Integer.valueOf(text))); 
        if (tagName.equals("Experience")) 
         currentDancer.setExperience(BigInteger.valueOf(Integer.valueOf(text))); 
        if (tagName.equals("Number")) 
         currentDance.setNumber(BigInteger.valueOf(Integer.valueOf(text))); 

        break; 
      } 


     } 

    } catch (XMLStreamException e) { 
     e.printStackTrace(); 
    } 
} 

}

和xsd:

<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
xmlns:Dance="Dancers" 
targetNamespace="Dancers"> 
    <simpleType name="Type"> 
    <restriction base="string"></restriction> 
    </simpleType> 

    <simpleType name="Scene"> 
    <restriction base="string"></restriction> 
    </simpleType> 

    <simpleType name="NumberOfDancers"> 
    <restriction base="string"> 
     <enumeration value="mass"></enumeration> 
     <enumeration value="solo"></enumeration> 
     <enumeration value="pair"></enumeration> 
    </restriction> 
    </simpleType> 

    <simpleType name="Music"> 
    <restriction base="string"> 
     <enumeration value="phonogram"></enumeration> 
     <enumeration value="alive"></enumeration> 
    </restriction> 
    </simpleType> 

    <simpleType name="Number"> 
    <restriction base="integer"></restriction> 
    </simpleType> 

    <simpleType name="Name"> 
    <restriction base="string"></restriction> 
    </simpleType> 

    <simpleType name="DanceTeam"> 
    <restriction base="string"></restriction> 
    </simpleType> 

    <simpleType name="Age"> 
    <restriction base="integer"></restriction> 
    </simpleType> 

    <simpleType name="Experience"> 
    <restriction base="integer"></restriction> 
    </simpleType> 


    <complexType name="Dancer"> 
    <sequence> 
     <choice> 
     <element name="name" type="Dance:Name"></element> 
     <element name="nameOfDanceTeam" type="Dance:DanceTeam"></element> 
     </choice> 
     <element name="age" type="Dance:Age"></element> 
     <element name="experience" type="Dance:Experience"></element> 
    </sequence> 
    </complexType> 

    <complexType name = "Dance"> 
    <sequence> 
     <element name="type" type="Dance:Type"></element> 
     <element name="scene" type="Dance:Scene"></element> 
     <element name="numberOfDancers" type="Dance:NumberOfDancers"></element> 
     <element name="music" type="Dance:Music"></element> 
     <element name="dancers" type="Dance:Dancer" minOccurs="1" maxOccurs="unbounded"></element> 
     <element name="number" type="Dance:Number"></element> 
    </sequence> 
    </complexType> 


    <element name="Dances"> 
    <complexType> 
     <sequence> 
      <element name="Dance" type="Dance:Dance" minOccurs="1" maxOccurs="unbounded"></element> 
     </sequence> 
    </complexType> 
    </element> 
</schema> 

和xml:

<?xml version="1.0" encoding="UTF-8"?> 
<Dances> 
<Dance> 
    <Type>Folk</Type> 

    <Scene>Dr. Frank N. Furter Major</Scene> 

    <NumberOfDancers>mass</NumberOfDancers> 

    <Music>phonogram</Music> 

    <Dancer> 
     <Name>Majenta</Name> 
     <Age>25</Age> 
     <Experience>25</Experience> 
    </Dancer> 

    <Dancer> 
     <Name>Riff Raff</Name> 
     <Age>2500</Age> 
     <Experience>25</Experience> 
    </Dancer> 

    <Dancer> 
     <Name>Columbia</Name> 
     <Age>25</Age> 
     <Experience>25</Experience> 
    </Dancer> 

    <Dancer> 
     <DanceTeam>Guests</DanceTeam> 
     <Age>2566</Age> 
     <Experience>667</Experience> 
    </Dancer> 

    <Number>1</Number> 
</Dance> 
</Dances> 

感谢的求助。对不起,如果我的英语太糟糕了。

+0

SAX解析器运行良好。 Notepad ++中的XML和XSD文件中看不到奇怪的字符。它显示它们吗? – user2574232

回答

0

问题在于你的XML文件。在<?xml...之前有一些(不可见的)内容导致解析器失败。 一个可能的解决方案见这个问题:Content is not allowed in Prolog SAXParserException

为了回答您的编辑:这是可能的,你会不会认为这是在记事本+ +是可见字符 - 检查以下网址的可能解决方案:http://www.rgagnon.com/javadetails/java-handle-utf8-file-with-bom.html

+0

或者,在XSD中(我假设它也被解析了)。既然粘贴的文件在'<?xml'前面显示空格,我会把钱存在那里。 – parsifal

+0

OK,我将其添加到代码: 'BOMInputStream博敏=新BOMInputStream(new''的FileInputStream(xmlFileName));'' 如果(bomIN.hasBOM()== FALSE){' 它似乎,它里面没有奇怪的符号。 – user2574232

+0

哦。现在它通过。谢谢! – user2574232

相关问题