我只是在使用Matlab搞乱XML和XPath。我有一个相当复杂的XML,但我只需要访问一个节点,并添加一些其他子节点。
这是XML的一部分:
<?xml version="1.0" encoding="UTF-8" ?>
<viper xmlns="http://lamp.cfar.umd.edu/viper#" xmlns:data="http://lamp.cfar.umd.edu/viperdata#">
<config>
<descriptor name="Information" type="FILE">
<attribute dynamic="false" name="SOURCETYPE" type="http://lamp.cfar.umd.edu/viperdata#lvalue">
<data:lvalue-possibles>
<data:lvalue-enum value="SEQUENCE" />
<data:lvalue-enum value="FRAMES" />
</data:lvalue-possibles>
</attribute>
<attribute dynamic="false" name="NUMFRAMES" type="http://lamp.cfar.umd.edu/viperdata#dvalue" />
<attribute dynamic="false" name="FRAMERATE" type="http://lamp.cfar.umd.edu/viperdata#fvalue" />
<attribute dynamic="false" name="H-FRAME-SIZE" type="http://lamp.cfar.umd.edu/viperdata#dvalue" />
</descriptor>
<descriptor name="PLAYER" type="OBJECT">
<attribute dynamic="false" name="Name" type="http://lamp.cfar.umd.edu/viperdata#svalue" />
<attribute dynamic="true" name="Location" type="http://lamp.cfar.umd.edu/viperdata#bbox" />
</descriptor>
</config>
<data>
<sourcefile filename="C:/Users/XXX/Desktop/ViperGT/mountain.xgtf">
<file id="0" name="Information">
<attribute name="SOURCETYPE" />
<attribute name="NUMFRAMES">
<data:dvalue value="100" />
</attribute>
<attribute name="FRAMERATE">
<data:fvalue value="1.0" />
</attribute>
<attribute name="H-FRAME-SIZE" />
<attribute name="V-FRAME-SIZE" />
</file>
<object framespan="2:99" id="0" name="PLAYER">
<attribute name="Name">
<data:svalue value="1" />
</attribute>
<attribute name="Location">
<data:bbox framespan="2:2" height="81" width="182" x="40" y="55" />
</attribute>
</object>
</sourcefile>
</data>
</viper>
因此我可以访问<data:bbox />
阻止。
这是我的代码:
import javax.xml.xpath.*
factory = XPathFactory.newInstance();
xpath = factory.newXPath();
% compile and evaluate the XPath Expression
expression = xpath.compile('/viper/data/sourcefile/object//data');
% Read XML
gt = xmlread('myGT.xml');
objectNode = expression.evaluate(gt, XPathConstants.NODE);
任何帮助?
答案 0 :(得分:1)
我认为您应该使用XPathConstants.NODESET
而不是XPathConstants.NODE
,因为您的xml中有多个data
元素。