首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAVA StAX抽取

JAVA StAX抽取
EN

Stack Overflow用户
提问于 2013-03-02 02:37:46
回答 2查看 212关注 0票数 0

我也不知道如何在XML文件中提取开始标记元素名称。我接近了~意思是没有错误,我得到的是标记名,但我得到的是标记名加上信息。我得到的是:

代码语言:javascript
复制
{http://www.publishing.org}author
{http://www.publishing.org}Date
{http://www.publishing.org}ISBN

我的最终结果,我希望我的程序给我:

代码语言:javascript
复制
Author
Data
ISBN

首先,这是我的XML文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<BookCatalog xmlns = "http://www.publishing.org">
    <Book>
        <Title>Yogasana</Title>
        <author>Dhirenda</author>
        <Date>1966</Date>
        <ISBN>81-40</ISBN>
        <Publisher>Dhirenda</Publisher>
        <Cost Currency = "INR">11.50</Cost>
    </Book>
    <Book>
        <Title>Yogasana</Title>
        <author>J. K</author>
        <Date>1954</Date>
        <ISBN>0-06</ISBN>
        <Publisher>Harper</Publisher>
        <Cost Currency = "INR">2.95</Cost>
    </Book>
</BookCatalog>

我尝试过System.out.println("Start Element GetName:“+ se.getName());System.out.println("Start Element GetEventType:”+ se.getEventType());System.out.println("Attribute name:“+ attribute.getValue());System.out.println("Attribute name:”+ attribute.getName());

getname的结果是:{http://www.publishing.org}日期。

getEventType的收益率:1

attribute.getValue收益率: INR

attribute.getName收益率:货币。

如何获得只包含元素名称的结果: Date、author ISBN等?

为什么我认为getName是附加文本的正确方法:{http://www.publishing.org}?

下面是我的代码:

代码语言:javascript
复制
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));

    String dataread = null;

    while(reader.hasNext())
            {
                XMLEvent event = reader.nextEvent();
                XMLEvent nextEvent = reader.peek();
                switch (event.getEventType())
                        {
                    case XMLEvent.START_ELEMENT:
                        StartElement se = event.asStartElement();

                        //StartElement se = (StartElement) event;
                        System.out.println("Start Element GetName: " + se.getName());
                        System.out.println("Start Element GetEventType: " + se.getEventType());

                        Iterator iterator = se.getAttributes();
                        while (iterator.hasNext()) {
                           Attribute attribute = (Attribute) iterator.next();
                            QName name = attribute.getName();
                            //String value = attribute.getValue();
                            //System.out.println("Attribute name/value: " + name + "/" + value);
                            //System.out.println("Attribute name: " + name);
                            System.out.println("Attribute Value: " + attribute.getValue());
                            System.out.println("Attribute name: " + attribute.getName());
                        }



                        //System.out.println("Here");
                        //System.out.print("<" + se.getName());

                        //System.out.print(" " + se.getName());
                        //Iterator iterator = se.getAttributes();
                        //System.out.print(" " + se.getAttributes());

                        System.out.printf("\n");
                        String elem = se.getName().toString();
                        //String elem = se.getAttributes().toString();
                        //String ele = event.getAttributeName();
                        //if( se.getName().toString() == "{http://www.publishing.org}Date")
                        if( se.getName().toString().equals("{http://www.publishing.org}Date"))
                        //if( elem == "1")
                        {
                         dataread = reader.getElementText();
                         //System.out.printf("data = %s\n",reader.getElementText());
                         System.out.printf("data = %s\n",dataread);

                        }
                        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
    System.out.printf("FINAL data = %s\n",dataread);

    reader.close();
}//end Main

}//公网claSS

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-02 12:33:55

1)尝试

代码语言:javascript
复制
System.out.println("Start Element GetName: " + se.getName().getLocalPart());

2) XMLStreamReader可以做同样的工作,但速度更快

票数 1
EN

Stack Overflow用户

发布于 2013-03-02 02:52:49

答案很简单:您已经在xml中为BookCatalog定义了一个名称空间

代码语言:javascript
复制
<BookCatalog xmlns = "http://www.publishing.org">

如果在不同的名称空间中有同名的标记,这就是产生差异的方法!

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15164584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档