如何通过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方法访问任何属性。