强制Java在web浏览器中打开XML
我有一个程序(GUI=JavaFX),它扫描我的文件系统以查找特定的XML报告文件,并将它们列在一个表中。这些XML报告通过XSLT在web浏览器中呈现。现在,我希望能够在Java应用程序中单击这样的报告,并将其显示在浏览器中。我已经编写了处理程序,并且确定了正确的URL。在我的Windows系统上,这是强制Java在web浏览器中打开XML,java,xml,browser,Java,Xml,Browser,我有一个程序(GUI=JavaFX),它扫描我的文件系统以查找特定的XML报告文件,并将它们列在一个表中。这些XML报告通过XSLT在web浏览器中呈现。现在,我希望能够在Java应用程序中单击这样的报告,并将其显示在浏览器中。我已经编写了处理程序,并且确定了正确的URL。在我的Windows系统上,这是 file://localhost/C:/report.xml XML不是问题所在。如果我在浏览器中手动打开它,一切正常。但是,如果我使用谷歌并询问如何在浏览器中打开文件,它总是会告诉我: j
file://localhost/C:/report.xml
XML不是问题所在。如果我在浏览器中手动打开它,一切正常。但是,如果我使用谷歌并询问如何在浏览器中打开文件,它总是会告诉我:
java.awt.Desktop.getDesktop().
browse(new java.net.URI("file://localhost/C:/report.xml"));
因为这是一个很好的http URL(网站)解决方案,所以它总是在我的默认文本编辑器(例如记事本++)中打开我的XML文件。因此,桌面的browse方法并没有真正强制进行浏览,只是返回到默认的open操作
因此,问题是:如何强制Java在浏览器中打开XML,类似于Windows函数“open with>”
这里是一个sscce(即使文件不存在,也应尝试在浏览器中访问该文件):
如果浏览器无法处理URI,则启动“为处理指定类型的URI而注册的应用程序被调用”
检查您最喜欢的浏览器是否存在(Chrome、Fx、O、IE等),或者通过其他方法获取它,然后。如果你知道你正在运行的操作系统(Windows),那么你只需要考虑它的Exchange行。 < P> AWT DeStop.Booad方法的JavaFX替换将是。您可以试试,但它可能会有与Desktop.browse相同的效果 另一种选择是在Java中,然后使用标签或自定义JavaFX控件在JavaFXWebView中显示生成的文档,或者仅在标签或自定义JavaFX控件中显示生成的文档。请注意,从JavaFX2.2开始,JavaFXWebView还没有用于漂亮打印xml内容类型的查看器,因此要在WebView中获得漂亮打印的xml,您可能需要使用javascript/css/html将xml解析并格式化为html文档,类似于中演示的方法
对我来说,虽然这是更多的开发工作,使用JavaFX处理显示的另一种方法很好,因为结果文档的显示可以封装并控制在JavaFX应用程序本身中,并且您不依赖于主机环境中可能安装或不安装的任何浏览器和配置。要获得更好的帮助,请附上一份。谢谢你的sscce。返回什么?Desktop.isDesktopSupported()返回true。如果我尝试java.awt.Desktop.getDesktop().browse(新的java.net.URI(“);它会按预期打开浏览器。谢谢,Peter。我假设您已经阅读了API,但如果您没有阅读:“如果默认浏览器无法处理指定的URI,则会调用为处理指定类型的URI而注册的应用程序“是的,是的。但很明显,我的浏览器确实支持XML(就像每个浏览器一样——甚至IE!;-),因为我可以手动打开URL。它不是XML.HostServices.showDocument的默认应用程序,具有相同的效果。至于在应用程序中显示内容:对于所讨论的函数,实现工作量太大。但是谢谢你的建议。
public class XMLOpener {
public static void main(String[] args)
{
String fileURL = "file://localhost/C:/report.xml";
try {
java.awt.Desktop.getDesktop().browse(new java.net.URI(fileURL));
} catch (Exception e) {}
}
}