use*_*826 7 java xml matlab xml-parsing
我需要用MATLAB解析XML字符串(注意:没有文件I/O,因此我不想将字符串写入文件然后读取它们).我从HTTP连接接收字符串,解析速度非常快.我最关心的是读取整个字符串中某些标签的值
网络充满了关于使用regexp解析XML的死亡威胁,所以我不想进入那个.我知道MATLAB有无缝的Java集成,但我不是很精通java.有一种快速的方法可以非常快速地从XML获取某些值吗?
例如,我想从下面的字符串中获取'volume'信息并将其写入变量.
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<root>
  <volume>256</volume>
  <length>0</length>
  <time>0</time>
  <state>stop</state>
  ....
对于它的价值,下面是Matlab可执行Java代码来执行所需的任务,而无需写入中间文件:
%An XML formatted string
strXml = [...
    '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>' char(10)...
    '<root>' char(10) ...
    '  <volume>256</volume>' char(10) ...
    '  <length>0</length>' char(10) ...
    '  <time>0</time>' char(10) ...
    '  <state>stop</state>' char(10) ...
    '</root>' ];
%"simple" java code to create a document from said string
xmlDocument = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder.parse(java.io.StringBufferInputStream(strXml));
%"intuitive" methods to explore the xmlDocument
nodeList = xmlDocument.getElementsByTagName('volume');
numberOfNodes = nodeList.getLength();
firstNode = nodeList.item(0);
firstNodeContent = firstNode.getTextContent;
disp(firstNodeContent);  %Returns '256'
作为替代方案,如果您的应用程序允许,请考虑将URL直接传递到XML解析器中.未经测试的java代码如下,但这也可能打开了Matlab内置xslt函数.
xmlDocument = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder.parse('URL_AS_A_STRING_HERE');
文档在这里.从"javax.xml.parsers"包开始.