我有一个XML文件,我需要使用PHP解析并将解析后的数据发送给Java,有哪些最佳实践可以实现它?
答案 0 :(得分:4)
这是针对SOAP等网络服务的案例研究。
答案 1 :(得分:2)
如果数据量很大并且您需要快速传输,那么您可以考虑使用protobuf(http://code.google.com/p/protobuf/)。它与SOAP相当,但完全以二进制形式进行通信。
答案 2 :(得分:2)
我想这可能有助于更多地了解您尝试做的事情以及您的局限性。
您是否只编写PHP端并将数据发送到已创建的Java应用程序?或者你在做双方?您可以使用哪种协议与Java进行交互?
// - >澄清后//
我对ILOG引擎知之甚少,但是我看了一下API,想知道我将从哪里开始。
显然我不知道如何为您设置一切,但似乎ILOG有一个用于处理已经内置的XML的API?
http://ilog.cn/products/jrules/documentation/jrules67/api/html/index.html
就个人而言,我会对XML文件进行必要的修改,然后将其交给Java程序来处理使用该API。
对不起,如果我走错了方向!
答案 3 :(得分:2)
所以你想:
解析xml。
提取一些数据并将其插入MySql。
分析传入的数据并构造一些JRules参数。
然后调用Jrules。
右?
据我所知,JRules没有命令行API - 如果确实如此,你可以使用系统(...)调用来启动应用程序。
我最好的建议是用Java做任何事情!
JRules正在Websphere中运行,所以你肯定会运行一个Servlet引擎。 Java提供了解析XML,更新数据库和调用JRules所需的所有API。为什么要从php调用Java类呢?
Alternativly!我注意到JRules有一个Web服务接口。 Web上的某个地方是一个php SOAP :: Client接口(它是可选的,但应该在大多数php 5发行版中默认提供),因此您可以在JRules上配置WebService,获取xml架构并将其加载到php引擎中。然后它相对容易使用phps SOAP :: Client类来调用Web服务。见http://th2.php.net/manual/en/book.soap.php
但仍然更喜欢纯Java选项。
答案 4 :(得分:1)
“解析”是什么意思?究竟是什么,PHP代码在做什么?
您可以使用SOAP或XMLRPC或Thrift或Protobuf之类的东西来让两种语言相互通信,但让PHP代码加载XML并简单地将其逐字节发送到Java程序通过HTTP或其他东西。然后,Java代码可以执行解析工作,这可能就像将XML数据交给您正在使用的库一样简单。
答案 5 :(得分:0)
您还可以使用PHP SimpleXML(PHP v5)从XML文件中读取数据
答案 6 :(得分:0)
有一个PHP / Java桥实现:http://php-java-bridge.sourceforge.net/pjb/我以前的公司在一个项目中使用它一次,据我所知它有效,但我没有参与该项目所以我不能告诉你到底任何问题。
如果这不是一个选项,那么通过SOAP或者更轻量级的交换格式的Web服务将是您最好的选择。
答案 7 :(得分:0)
为什么必须使用PHP解析此文件?将此代码移植到Java是不可能的? PHP代码返回什么? Java可以轻松读取(或者这是整个问题的一部分吗?)
正如我所看到的,你有以下几种选择:用Java重写逻辑,一个Web服务(SOAP,具有你的REST),PHP/Java bridge或PHP scripting engine in Java。
答案 8 :(得分:0)
我会建议这个替代方案 -
a)解析XML并将其转换为PHP中的JSON(Java脚本对象表示法)。 (操纵JSON对象非常简单,就像在PHP中处理地图/数组一样)
b)对JSON数据进行任何操作。
c)调用Java服务器端组件(Servlet / Struts操作等,假设您的Java为Web组件)并将JSON数据发布到组件。
d)只需读取请求参数(JSON数据)并使用JSON库(sourceforge有一个很好的Java JSON库)将数据解析为Map / List(取决于您拥有的数据类型)。
答案 9 :(得分:0)
以下情况适用:
创建一个php rest服务,例如当标准Web请求请求时将返回xml文件的页面(例如,尝试在brwoser中打开页面)。然后,Java应用程序将连接到php rest服务(例如页面)并获取xml输出。
Java应用程序使用TCP协议启动PHP应用程序连接到的TCP服务器,并将XML文件发送到Java应用程序。
PHP应用程序将xml文件保存在数据库表的一列中,Java应用程序从那里读取它。