2011-03-14 53 views
2

鉴于此xml:的Xpath如何通过指数得到的元素和属性

<mets:techMD ID="techMD014"> 
    <mets:mdWrap MDTYPE="PREMIS:OBJECT"> 
     <mets:xmlData> 
      <premis:object 
        xsi:type="premis:file" 
        xsi:schemaLocation="info:lc/xmlns/premis-v2 
        http://www.loc.gov/standards/premis/v2/premis-v2-0.xsd"> 
       <premis:objectIdentifier> 
        <premis:objectIdentifierType 
        >filepath</premis:objectIdentifierType> 
        <premis:objectIdentifierValue 
        >bib1234_yyyymmdd_99_x_performance.xml</premis:objectIdentifierValue> 
       </premis:objectIdentifier> 
      </premis:object> 
     </mets:xmlData> 
    </mets:mdWrap> 
</mets:techMD> 
<mets:techMD ID="techMD015"> 
    <mets:mdWrap MDTYPE="PREMIS:OBJECT"> 
     <mets:xmlData> 
      <premis:object 
        xsi:type="premis:representation" 
        xsi:schemaLocation="info:lc/xmlns/premis-v2 
        http://www.loc.gov/standards/premis/v2/premis-v2-0.xsd"> 
       <premis:objectIdentifier> 
        <premis:objectIdentifierType 
        >local</premis:objectIdentifierType> 
        <premis:objectIdentifierValue 
        >bib1234_yyyymmdd_99_x</premis:objectIdentifierValue> 
       </premis:objectIdentifier> 
      </premis:object> 
     </mets:xmlData> 
    </mets:mdWrap> 
</mets:techMD> 

我想作一个XPath查询一个同时索引和属性考虑在内。 I.e我可以将这两个组合成一个查询吗? (它围绕“对象”元素Im的东西感兴趣):

//techMD/mdWrap[ 
    @MDTYPE=\'PREMIS:OBJECT\' 
]/xmlData//object[1]/objectIdentifier/objectIdentifierValue 

//techMD/mdWrap[ 
    @MDTYPE=\'PREMIS:OBJECT\' 
]/xmlData//object[ 
    @xsi:type=\'premis:file\' 
]/objectIdentifier/objectIdentifierValue 

谢谢!

回答

4

只需更换根据部分:

object[@xsi:type='premis:file'][1] 

,如果你想这些,如果你想第一object谁具有给定xsi:type值或

object[1][@xsi:type='premis:file'] 

的第一object,只要它有一个给定值为xsi:type

+3

+1正确答案。最后的谓词将等于'[position()= 1和@xsi:type ='premis:file']' – 2011-03-14 16:00:57

+0

@Ajjandro。是。实际上在某些实现中会更快。 – Flack 2011-03-14 16:17:36

+0

谢谢你们,看起来我有我需要的东西:) – Jojje 2011-03-15 08:56:27

相关问题