2016-11-09 55 views
2

我只是用Matlab和XML和XPath搞混了。我有一個相當複雜的XML,但我只需要訪問一個節點,並添加一些其他子節點。Matlab中的XPath不會給出任何結果

這裏是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

Google關於在Java XPath中處理*默認名稱空間* – har07

+0

@ har07這是什麼樣的答案? O_o – Leo91

+0

這只是一個*評論*是精確的...無論如何,這個話題已經被提出並以各種形式和背景回答很多次 – har07

回答

1

我認爲你應該使用XPathConstants.NODESET而不是XPathConstants.NODE,因爲你的xml中有多個data元素。

+0

試過了,相同的結果。即使我想訪問第一個節點VIPER,它也不需要它:( – Leo91