我对Matlab的API根本不熟悉,但我会指出,如果您只想从您正在重新获取的XML流中取出特定值,那么使用Pursuit概述的DOM方法将占用大部分时间/内存HTTP连接。
尽管STAX会为您提供Java中最快的解析方法,但使用API可能会很笨拙,特别是如果您不熟悉Java。你可以使用SJXP,它是Java中STAX解析的一个非常薄弱的抽象(免责声明:我是作者),它允许你定义你想要的元素的路径,然后给解析器一个流(在这种情况下你的HTTP流),它会为你抽出所有的值。
举个例子,假设您想要到/ root /州和/根/音量值超出您发布的示例XML的,实际的Java将是这个样子:
// Create /root/state rule
IRule stateRule = new DefaultRule(Type.CHARACTER, "/root/state") {
@Override
public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
System.out.println("State is: " + text);
}
}
// Create /root/volume rule
IRule volRule = new DefaultRule(Type.CHARACTER, "/state/volume") {
@Override
public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
System.out.println("Volume is: " + text);
}
}
// Create the parser with the given rules
XMLParser parser = new XMLParser(stateRule, volRule);
你可以做所有的程序初始化在某个时候再启动后,当您从HTTP连接中的数据流,你会做这样的事情:
parser.parser(httpConnection.getOutputStream());
等;那么您的规则中定义的所有处理程序代码将在解析器通过HTTP连接中的字符流运行时被调用。
正如我所提到的,我并不熟悉Matlab,也不知道“Matlab-i-fy”这个代码的正确方法,但它看起来像第一个例子,你可以或多或少地使用Java API直接在这种情况下,如果这个解决方案比DOM方法重要的话,这个解决方案将更快并且使用更少的内存来解析。
您使用的是Windows吗?如果是这样,那么我可以为您提供一个.NET解决方案。 – 2012-02-28 22:42:43