Xpath如何通过索引和属性获取元素

Joj*_*jje 2 xpath

给定这个 xml:

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

我想做一个同时考虑索引和属性的 xpath 查询。即我可以将这两个合并为一个查询吗?(它是我感兴趣的“对象”元素周围的东西):

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

//techMD/mdWrap[
   @MDTYPE=\'PREMIS:OBJECT\'
]/xmlData//object[
   @xsi:type=\'premis:file\'
]/objectIdentifier/objectIdentifierValue
Run Code Online (Sandbox Code Playgroud)

谢谢!

Fla*_*ack 5

只需根据部分替换即可:

object[@xsi:type='premis:file'][1]
Run Code Online (Sandbox Code Playgroud)

如果你想要第一个object具有给定值的人xsi:type

object[1][@xsi:type='premis:file']
Run Code Online (Sandbox Code Playgroud)

如果您想要第一个object,只要它具有给定xsi:type值。

  • +1 正确答案。最后一个谓词等于“[position()=1 and @xsi:type='premis:file']” (3认同)