在MATLAB中解析XML字符串

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>
  ....
Run Code Online (Sandbox Code Playgroud)

Pur*_*uit 7

对于它的价值,下面是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'
Run Code Online (Sandbox Code Playgroud)

作为替代方案,如果您的应用程序允许,请考虑将URL直接传递到XML解析器中.未经测试的java代码如下,但这也可能打开了Matlab内置xslt函数.

xmlDocument = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder.parse('URL_AS_A_STRING_HERE');
Run Code Online (Sandbox Code Playgroud)

文档在这里.从"javax.xml.parsers"包开始.


eyk*_*nal 1

有一个完整的函数类用于处理 xml,包括xmlreadxmlwrite。这些对你的问题应该非常有用。

  • 但他确实明确表示他不想处理文件 (3认同)