Java 如何解析包含XML结构的字段?

Java 如何解析包含XML结构的字段?,java,mysql,xml,Java,Mysql,Xml,我的数据库(MYSQL)中有一个包含XML结构的字段,我想解析该字段以提取数据,我的想法是提取该字段并将其复制到文件中,然后解析它, 但是我应该为超过200行(这个数字随着时间的推移而增加)这样做的问题是,我应该每次打开一个文件来复制其中的字段,这会消耗时间和内存,这是他们的另一个解决方案吗 更新 我已尝试此代码,但它生成了一个错误: if(var2.length()!=0) { System.out.println("-------------

我的数据库(MYSQL)中有一个包含XML结构的字段,我想解析该字段以提取数据,我的想法是提取该字段并将其复制到文件中,然后解析它, 但是我应该为超过200行(这个数字随着时间的推移而增加)这样做的问题是,我应该每次打开一个文件来复制其中的字段,这会消耗时间和内存,这是他们的另一个解决方案吗

更新 我已尝试此代码,但它生成了一个错误:

if(var2.length()!=0)
             {
            System.out.println("---------------test1--------------");

             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
                System.out.println("*********test2*********");
                InputSource is = new InputSource(new StringReader(var2)); 
                Document parse = builder.parse(is);
                System.out.println("builder.parse"+builder.parse(is).toString());
    System.out.println("______test3_____");


             }
             else
                    System.out.println("null");

        }


             }
             else
                    System.out.println("null");
错误:

---------------test1--------------
*********test2*********
java.net.UnknownHostException: www.opensymphony.com
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:195)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
at sun.net.www.http.HttpClient.New(HttpClient.java:306)
at sun.net.www.http.HttpClient.New(HttpClient.java:323)
at  sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:677)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1315)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:1282)
at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:283)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1194)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1090)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1003)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
at DAOKPI.Main.main(Main.java:88)
--------------test1--------------
*********测试2*********
java.net.UnknownHostException:www.opensymphony.com
位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:195)
位于java.net.socksocketimpl.connect(socksocketimpl.java:366)
位于java.net.Socket.connect(Socket.java:529)
位于java.net.Socket.connect(Socket.java:478)
位于sun.net.NetworkClient.doConnect(NetworkClient.java:163)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
http.HttpClient.(HttpClient.java:233)
http.HttpClient.New(HttpClient.java:306)
http.HttpClient.New(HttpClient.java:323)
位于sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)
位于sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911)
位于sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
在com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:677)
位于com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startenty(XMLEntityManager.java:1315)
位于com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startdentity(XMLEntityManager.java:1282)
在com.sun.org.apache.xerces.internal.impl.xmldtscannerimpl.setInputSource(xmldtscannerimpl.java:283)
在com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1194)
在com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1090)
在com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1003)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
位于com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
位于com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235)
位于com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
位于DAOKPI.Main.Main(Main.java:88)

不要使用XML。使用数据库表来表示数据。

您使用的解析器是什么? 您不必将内容保存到文件(即SAX):


编辑:当然,如果可能的话,事先将xml数据导入到正确的关系模式中,就像昆汀提到的那样。

(作为对删除后的“我不明白!”评论的回应):xml是存储数据的一种方法。数据库是存储数据的一种手段。不要将XML格式的数据存储在数据库中。只需将数据直接存储在数据库中。根据需要添加其他表/行/列。问题是我无法在数据库中创建任何表,这是一个我无法修改的数据库(公司禁止),我无法使用中间数据库,这是一个管理问题。你应该试着修复它,而不是用复杂而低效的黑客来解决它。
saxParser.parse(new InputSource(new StringReader(yourXMLstring));