0

特定のXMLを識別し、それらのタグの1つで特定のデータを抽出する方法を理解しようとしています。

上記の目標を達成しようとすると、ドキュメントと例を確認してから、分岐して変更を加えてきました。

StAXを使用しています

私のコード全体とxmlファイルはこの投稿の下部にあります。

2つの質問があります:1)コードの一部が思ったとおりに動作しない理由について質問があります。私は持っています

String elem = se.getName().toString();
System.out.printf("elem = %s\n",elem);
if( se.getName().toString() == "{http://www.publishing.org}Date")
                        //if( elem == "1")
                        {
                            System.out.println("Here !!!!!!!!!!!!!!!!!");
                        }

My System.out.printf(“ elem =%s \ n”、elem);

収量:elem={ http://www.publishing.org }日付

しかし、私のifステートメントif(se.getName()。toString()== "{ http://www.publishing.org } Date")は決して真ではありません。つまり、「ここ!!!」を取得することはありません。</ p >>

質問2、なぜ私は得ているのですか?

{http://www.publishing.org}author
{http://www.publishing.org}Date
{http://www.publishing.org}ISBN

著者、日付、ISBNだけでなく、すべての行で{ http://publishing.org }も表示されるのはなぜですか。

public static void main(String[] args) throws FileNotFoundException, XMLStreamException
{
    // TODO code application logic here
    //System.out.println("Here");
    //String filename = null;
    String filename = "BookCatalog.xml";
    XMLInputFactory factory = XMLInputFactory.newInstance();
    XMLEventReader reader = factory.createXMLEventReader(new FileReader(filename));
    while(reader.hasNext())
            {
                XMLEvent event = reader.nextEvent();
                XMLEvent nextEvent = reader.peek();
                switch (event.getEventType())
                        {
                    case XMLEvent.START_ELEMENT:
                        StartElement se = event.asStartElement();
                        //System.out.println("Here");
                        //System.out.print("<" + se.getName());

                        System.out.print(" " + se.getName());
                        System.out.printf("\n");
                        String elem = se.getName().toString();
                        //String elem = "1";
                        System.out.printf("elem = %s\n",elem);
                        //String ele = event.getAttributeName();
                        if( se.getName().toString() == "{http://www.publishing.org}Date")
                        //if( elem == "1")
                        {
                            System.out.println("Here !!!!!!!!!!!!!!!!!");
                        }
                        Iterator attributes = se.getNamespaces();

                        while(attributes.hasNext())
                        {
                            Attribute attr= (Attribute)attributes.next();
                            System.out.print(" " + attr.getName() + "=\"" +attr.getValue() +"\"");
                            System.out.printf("\n");
                        }//end while loop
                    System.out.print(">");
                        if(nextEvent.isCharacters())
                        {
                            Characters c = reader.nextEvent().asCharacters();
                            if(!c.isWhiteSpace())
                            System.out.print(c.getData());
                            System.out.printf("\n");


                        }// end if
                    /*case XMLEvent.END_ELEMENT>
                        EndElement ee = event.asEndElement();
                        System.out.print("</"+ee.getName()+">");
                        break;
                        * */
                        }// end witch
            }// end while
    reader.close();
}//end Main

およびXML:http://www.publishing.org"> Yogasana Dhirenda 1966 81-40 Dhirenda 11.50 Yogasana J. K 1954 0-06 Harper 2.95

4

1 に答える 1

1

質問1:これは.equals()vs==のように見えます。.equals()が必要だと思います。

于 2013-02-28T14:55:38.557 に答える