如何使用Java检索XML的元素值?
我是XML新手。 我想读请求名称的基础上下面的XML。 请帮助我如何阅读Java中的以下XML –
<?xml version="1.0"?> <config> <Request name="ValidateEmailRequest"> <requestqueue>emailrequest</requestqueue> <responsequeue>emailresponse</responsequeue> </Request> <Request name="CleanEmail"> <requestqueue>Cleanrequest</requestqueue> <responsequeue>Cleanresponse</responsequeue> </Request> </config>
如果您的XML是一个string,那么您可以执行以下操作:
String xml = ""; //Populated XML String.... DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new InputSource(new StringReader(xml))); Element rootElement = document.getDocumentElement();
如果你的XML在一个文件中,那么Document document
将被实例化如下:
Document document = builder.parse(new File("file.xml"));
document.getDocumentElement()
返回文档的文档元素(在你的情况下是<config>
)的节点。
一旦你有一个rootElement
,你可以访问元素的属性(通过调用rootElement.getAttribute()
方法)等等。对于java的org.w3c.dom.Element
更多关于java DocumentBuilder & DocumentBuilderFactory的信息 。 请记住 ,所提供的示例创build了一个XML DOM树,所以如果您有一个巨大的XML数据,树可以是巨大的。
- 相关的问题 。
更新这是一个获取元素<requestqueue>
“值”的<requestqueue>
protected String getString(String tagName, Element element) { NodeList list = element.getElementsByTagName(tagName); if (list != null && list.getLength() > 0) { NodeList subList = list.item(0).getChildNodes(); if (subList != null && subList.getLength() > 0) { return subList.item(0).getNodeValue(); } } return null; }
你可以有效地称之为,
String requestQueueName = getString("requestqueue", element);
如果您只是希望从XML获取单个值,则可能需要使用Java的XPath库。 举个例子,看看我对前一个问题的回答:
- 如何在具有默认名称空间的xml文档上使用XPath
它看起来像这样:
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; public class Demo { public static void main(String[] args) { DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = domFactory.newDocumentBuilder(); Document dDoc = builder.parse("E:/test.xml"); XPath xPath = XPathFactory.newInstance().newXPath(); Node node = (Node) xPath.evaluate("/Request/@name", dDoc, XPathConstants.NODE); System.out.println(node.getNodeValue()); } catch (Exception e) { e.printStackTrace(); } } }
如果你只需要一个(第一个)值从XML检索:
public static String getTagValue(String xml, String tagName){ return xml.split("<"+tagName+">")[1].split("</"+tagName+">")[0]; }
如果你想parsing整个XML文档使用JSoup:
Document doc = Jsoup.parse(xml, "", Parser.xmlParser()); for (Element e : doc.select("Request")) { System.out.println(e); }
有很多不同的方法来做到这一点。 您可能想要查看XStream或JAXB 。 有教程和例子。
有两种一般的做法。 您将创build该XML文件的域对象模型,看看这个
第二种select是使用事件驱动parsing,这是DOM xml表示的替代方法。 Imho你可以在这里find这两种基本技术的最佳总体比较。 当然,还有更多关于处理xml的知识,例如,如果给定XML模式定义(XSD),则可以使用JAXB 。
以下链接可能有帮助
http://labe.felk.cvut.cz/~xfaigl/mep/xml/java-xml.htm
有各种API可用于通过Java读取/写入XML文件。 我会参考使用StaX
另外这可以是有用的 – Java XML API
你可以做一个扩展org.xml.sax.helpers.DefaultHandler并调用的类
start_<tag_name>(Attributes attrs);
和
end_<tag_name>();
因为它是:
start_request_queue(attrs);
等等
然后扩展该类并实现所需的xmlconfiguration文件parsing器。 例:
... public void startElement(String uri,String name,String qname, org.xml.sax.Attributes attrs) 抛出org.xml.sax.SAXException { Class [] args = new Class [2]; args [0] = uri.getClass(); args [1] = org.xml.sax.Attributes.class; 尝试{ String mname = name.replace(“ - ”,“ ”); java.lang.reflect.Method m = getClass()。getDeclaredMethod(“start ”+ mname,args); m.invoke(this,new Object [] {uri,(org.xml.sax.Attributes)attrs}); }
catch(IllegalAccessException e){ 抛出新的RuntimeException(e); }
catch(NoSuchMethodException e){ 抛出新的RuntimeException(e); }
catch(java.lang.reflect.InvocationTargetException e){ org.xml.sax.SAXException se = new org.xml.sax.SAXException(e.getTargetException()); se.setStackTrace(e.getTargetException()的getStackTrace()); }
并在特定的configurationparsing器:
public void start_Request(String uri,org.xml.sax.Attributes attrs){ //确保正确读取属性 System.err.println(“Request,name =”+ attrs.getValue(0); }
既然你正在使用这个configuration,你最好的select是apache commons-configuration 。 对于简单的文件,比“原始的”XMLparsing器更容易使用。
请参阅XML操作指南