如何通过JAXB xml解析获取特定元素?

我已经使用JAXB来解析XML。如何通过JAXB xml解析来获取特定元素(即子节点),而无需将该元素解析为节点。

 
ANXXXNNN ANNNXXXXXT BNNXXXT

我已经完成了这样的解组,它运行正常。对于性能,我不希望元素作为节点。还有其他方法吗?

 Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc; doc = db.parse(file); NodeList node = (NodeList)doc.getElementsByTagName("TO"); JAXBElement element = jaxbUnmarshaller.unmarshal(node.item(0),ToType.class); 

对象模型就像

 @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "ToType", propOrder = { "credential" }) public class ToType { @XmlElement(name = "Credential", required = true) protected CredentialType credential; public CredentialType getCredential() { return credential; } public void setCredential(CredentialType value) { this.credential = value; } 

}

可以使用StAX(JSR-173)解析器(包含在从Java SE 6开始的JDK / JRE中)。 然后,您可以将XMLStreamReader推进到子节点并从那里解组。

 import javax.xml.stream.*; import javax.xml.transform.stream.StreamSource; import javax.xml.bind.*; public class Demo { public static void main(String[] args) throws Exception { XMLInputFactory xif = XMLInputFactory.newFactory(); StreamSource xml = new StreamSource("src/forum14358769/input.xml"); XMLStreamReader xsr = xif.createXMLStreamReader(xml); // Advance to the "To" element. while(xsr.hasNext()) { if(xsr.isStartElement() && "To".equals(xsr.getLocalName())) { break; } xsr.next(); } // Unmarshal from the XMLStreamReader that has been advanced JAXBContext jc = JAXBContext.newInstance(ToType.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); ToType toType = unmarshaller.unmarshal(xsr, ToType.class).getValue(); } } 

了解更多信息

您将不得不执行以下代码来执行JAXB Unmarshalling :

 unmarshaler.unmarshal(source); 

这将返回您将使用xjc命令生成的类的实例

然后,您可以使用bean方法访问任何属性。