获取子元素 java,java使用StAX以通用方式获取子元素

我真的不明白你要做什么,但如果你想要标签的本地名称导致START_ELEMENT事件,你可以这样做:

if (event.getEventType() == START_ELEMENT) {

QName qname = event.asStartElement().getName()

System.out.println("Start of element " + qname.getLocalPart());

}

就个人而言,我通常会发现XMLStreamReader在大多数情况下对我来说更方便,但我认为这取决于用例以及您自己的个人偏好.专家提示,架构越严格,使用StAX解析数据就越容易.

您可能还希望查看JAX-B以获取自动XML数据绑定.

编辑:这是OP中XML的一个天真的递归下降StAX解析器:

@Test

public void recursiveDescentStaxParser( ) throws XMLStreamException,

FactoryConfigurationError

{

String msg = "John1Small Publishing House37.8";

XMLStreamReader reader = XMLInputFactory.newFactory( )

.createXMLStreamReader( new StringReader( msg ) );

reader.nextTag( );

readRoot( reader );

}

private void readRoot( XMLStreamReader reader ) throws XMLStreamException

{

while ( reader.nextTag( ) == XMLEvent.START_ELEMENT )

{

QName name = reader.getName( );

if ( "B".equals( name.getLocalPart( ) ) )

readBooks( reader );

else

reader.nextTag( ); // Empty

}

}

private void readBooks( XMLStreamReader reader ) throws XMLStreamException

{

while ( reader.nextTag( ) == XMLEvent.START_ELEMENT )

{

QName name = reader.getName( );

if ( !"Book".equals( name.getLocalPart( ) ) )

throw new XMLStreamException( name.toString( ) );

reader.nextTag( ); // Jump to

readBook( reader );

reader.nextTag( ); // Jump to

}

}

private void readBook( XMLStreamReader reader ) throws XMLStreamException

{

reader.nextTag( ); // Skip to

System.out.println( "Author: " + reader.getElementText( ) );

reader.nextTag( ); // Skip to

System.out.println( "Edition: " + reader.getElementText( ) );

reader.nextTag( ); // Skip to

System.out.println( "Publisher: " + reader.getElementText( ) );

reader.nextTag( ); // Skip to

System.out.println( "Price: " + reader.getElementText( ) );

reader.nextTag( ); // Skip to

}

写这样的东西不仅使代码更易于阅读和推理,而且还会在错误弹出时出现堆栈跟踪.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值