从 Octave 调用 java
Calling java from Octave
我正在编写一些使用 xpath classes 的脚本。在 Octave 中没有实现与 Matlab 中等效的 import 函数。我在这里 http://undocumentedmatlab.com/blog/java-class-access-pitfalls 发现 Matlab 无法使用非 public 构造函数创建对象。我认为它在 Octave 中是相似的。所以行
javaObject("javax.xml.xpath.XPathFactory")
error: [java] java.lang.NoSuchMethodException: javax.xml.xpath.XPathFactory
报错。但是,有一个 public 静态 class 方法 returns class 引用 newInstance,因此可以创建一个 class。
XPathConstans class 没有类似的方法。有什么方法可以让 class 在 Octave 中访问?
javaaddpath("C:/Program Files/Java/jdk1.8.0_60/jre/lib/rt.jar");
% Construct the DOM.
% These 3 lines are equivalent to xDoc = xmlread(filename) in matlab
parser = javaObject("com.sun.org.apache.xerces.internal.parsers.DOMParser");
parser.parse(filename);
xDoc = parser.getDocument;
% Create an XPath expression.
%factory = javaObject("javax.xml.xpath.XPathFactory");
factory = javaMethod("newInstance","javax.xml.xpath.XPathFactory")
xpath = factory.newXPath
expression = xpath.compile('//demosection/label');
% Apply the expression to the DOM.
%constants = javaObject("javax.xml.xpath.XPathConstants")
nodeList = expression.evaluate(xDoc,XPathConstants.NODESET);
% Iterate through the nodes that are returned.
for i = 1:nodeList.getLength
node = nodeList.item(i-1);
disp(char(node.getFirstChild.getNodeValue))
end
您正在尝试访问 XPathConstants
class 的静态字段。要访问字段,请使用 java_get()
。由于 class 没有构造,您需要将它与 class 名称一起使用(而不是 class 的实例):
octave> java_get ("javax.xml.xpath.XPathConstants", "NODESET")
ans =
<Java object: javax.xml.namespace.QName>
octave> java_get ("javax.xml.xpath.XPathConstants", "NODESET").toString ()
ans = {http://www.w3.org/1999/XSL/Transform}NODESET
我正在编写一些使用 xpath classes 的脚本。在 Octave 中没有实现与 Matlab 中等效的 import 函数。我在这里 http://undocumentedmatlab.com/blog/java-class-access-pitfalls 发现 Matlab 无法使用非 public 构造函数创建对象。我认为它在 Octave 中是相似的。所以行
javaObject("javax.xml.xpath.XPathFactory")
error: [java] java.lang.NoSuchMethodException: javax.xml.xpath.XPathFactory
报错。但是,有一个 public 静态 class 方法 returns class 引用 newInstance,因此可以创建一个 class。 XPathConstans class 没有类似的方法。有什么方法可以让 class 在 Octave 中访问?
javaaddpath("C:/Program Files/Java/jdk1.8.0_60/jre/lib/rt.jar");
% Construct the DOM.
% These 3 lines are equivalent to xDoc = xmlread(filename) in matlab
parser = javaObject("com.sun.org.apache.xerces.internal.parsers.DOMParser");
parser.parse(filename);
xDoc = parser.getDocument;
% Create an XPath expression.
%factory = javaObject("javax.xml.xpath.XPathFactory");
factory = javaMethod("newInstance","javax.xml.xpath.XPathFactory")
xpath = factory.newXPath
expression = xpath.compile('//demosection/label');
% Apply the expression to the DOM.
%constants = javaObject("javax.xml.xpath.XPathConstants")
nodeList = expression.evaluate(xDoc,XPathConstants.NODESET);
% Iterate through the nodes that are returned.
for i = 1:nodeList.getLength
node = nodeList.item(i-1);
disp(char(node.getFirstChild.getNodeValue))
end
您正在尝试访问 XPathConstants
class 的静态字段。要访问字段,请使用 java_get()
。由于 class 没有构造,您需要将它与 class 名称一起使用(而不是 class 的实例):
octave> java_get ("javax.xml.xpath.XPathConstants", "NODESET")
ans =
<Java object: javax.xml.namespace.QName>
octave> java_get ("javax.xml.xpath.XPathConstants", "NODESET").toString ()
ans = {http://www.w3.org/1999/XSL/Transform}NODESET