如何在groovy中使用docype读取XML?

如何在groovy中使用docype读取XML?,groovy,Groovy,我编写了以下代码来读取“struts.xml”(struts2配置文件) struts.xml中定义了以下doctype <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> 当我从struts.xml中删除这一行时,代码可以完美地运行。否则,它将给出以下

我编写了以下代码来读取“struts.xml”(struts2配置文件)

struts.xml中定义了以下doctype

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">  

当我从struts.xml中删除这一行时,代码可以完美地运行。否则,它将给出以下异常

Exception in thread "main" java.net.UnknownHostException: struts.apache.org
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:234)
at java.net.Socket.connect(Socket.java:551)
at java.net.Socket.connect(Socket.java:501)
at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:403)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:521)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:246)
at sun.net.www.http.HttpClient.New(HttpClient.java:320)
at sun.net.www.http.HttpClient.New(HttpClient.java:337)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:838)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:790)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:715)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:959)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source)
at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at groovy.util.XmlParser.parse(XmlParser.java:118)
at groovy.util.XmlParser$parse.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at demo.main(Struts2ConfigurationReader.groovy:14)
线程“main”java.net.UnknownHostException中的异常:struts.apache.org 位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:234) 位于java.net.Socket.connect(Socket.java:551) 位于java.net.Socket.connect(Socket.java:501) 位于sun.net.NetworkClient.doConnect(NetworkClient.java:180) 位于sun.net.www.http.HttpClient.openServer(HttpClient.java:403) 位于sun.net.www.http.HttpClient.openServer(HttpClient.java:521) http.HttpClient.(HttpClient.java:246) http.HttpClient.New(HttpClient.java:320) http.HttpClient.New(HttpClient.java:337) 位于sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:838) 位于sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:790) 位于sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:715) 位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:959) 位于org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(未知源) 位于org.apache.xerces.impl.XMLEntityManager.startenty(未知来源) 位于org.apache.xerces.impl.XMLEntityManager.startdentity(未知源) 位于org.apache.xerces.impl.xmldtddscannerimpl.setInputSource(未知源) 在org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(未知来源) 位于org.apache.xerces.impl.XMLDocumentFragmentScanneImpl.ScandDocument(未知来源) 位于org.apache.xerces.parsers.XML11Configuration.parse(未知源) 位于org.apache.xerces.parsers.XML11Configuration.parse(未知源) 位于org.apache.xerces.parsers.XMLParser.parse(未知源) 位于org.apache.xerces.parsers.AbstractSAXParser.parse(未知源) 位于groovy.util.XmlParser.parse(XmlParser.java:118) 在groovy.util.XmlParser$parse.call处(未知源) 位于org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42) 位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) 在demo.main(Struts2ConfigurationReader.groovy:14)
我遗漏了什么?

我假设您没有进行解析的internet连接

您可以通过解析器的功能关闭此功能:

替换:

Node struts = new XmlParser().parse(new File(path))


PS:您还可以使用groovy执行以下操作:

  • 删除
    static main(args)
    ——假设这是一个脚本,则不需要它
  • 更改:

    String path = /struts.xml/
    String timestamp = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new Date())
    String csvName = "struts2-" + timestamp + ".csv"
    

  • 使用
    File.withWriter
    可能更容易阅读/code。这:

    FileWriter writer = new FileWriter(new File(csvName))
    writer.write "#,package,extends,action,method,class\n"
    ....
    writer.close()
    
    可以写为:

    new File(csvName).withWriter { writer ->
      writer.writeLine "#,package,extends,action,method,class"
      ....
    }
    

我假设您没有进行解析的internet连接

您可以通过解析器的功能关闭此功能:

替换:

Node struts = new XmlParser().parse(new File(path))


PS:您还可以使用groovy执行以下操作:

  • 删除
    static main(args)
    ——假设这是一个脚本,则不需要它
  • 更改:

    String path = /struts.xml/
    String timestamp = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new Date())
    String csvName = "struts2-" + timestamp + ".csv"
    

  • 使用
    File.withWriter
    可能更容易阅读/code。这:

    FileWriter writer = new FileWriter(new File(csvName))
    writer.write "#,package,extends,action,method,class\n"
    ....
    writer.close()
    
    可以写为:

    new File(csvName).withWriter { writer ->
      writer.writeLine "#,package,extends,action,method,class"
      ....
    }
    

这不仅仅是答案。非常有帮助。这不仅仅是答案。非常有用。