0

我正在处理以下 XML:

<digiprovMD ID="digiprov-3">
<mdWrap MDTYPE="PREMIS">
<xmlData>
  <agent>
    <agentIdentifier>
      <agentIdentifierType>URI</agentIdentifierType
      <agentIdentifierValue>info:fda/system-v0.16.2</agentIdentifierValue>
      <agentIdentifierResult>outcome</agentIdentifierResult>
    </agentIdentifier>
    <agentName>DAITSS Account: UF</agentName>
    <agentType>Affiliate</agentType>
  </agent>
</xmlData>
</mdWrap>
</digiprovMD>
<digiprovMD ID="digiprov-4">
<mdWrap MDTYPE="PREMIS">
<xmlData>
  <agent>
    <agentIdentifier>
      <agentIdentifierType>URI</agentIdentifierType>
      <agentIdentifierValue>info:fda/system-v0.16.2</agentIdentifierValue>              
    </agentIdentifier>
    <agentName>daitss system (v0.16.2)</agentName>
    <agentType>software</agentType>
  </agent>
</xmlData>
</mdWrap>
</digiprovMD>
<digiprovMD ID="digiprov-5">
<mdWrap MDTYPE="PREMIS">
<xmlData>
  <agent>
    <agentIdentifier>
      <agentIdentifierType>URI</agentIdentifierType>
      <agentIdentifierValue>info:fda/system-v0.16.2</agentIdentifierValue>
      <agentIdentifierResult>source</agentIdentifierResult>              
    </agentIdentifier>
    <agentIdentifier>
      <agentIdentifierType>URI</agentIdentifierType>
      <agentIdentifierValue>someotheruri</agentIdentifierValue>
      <agentIdentifierResult>outcome</agentIdentifierResult>              
    </agentIdentifier>
    <agentName>daitss system (v0.16.2)</agentName>
    <agentType>software</agentType>
  </agent>
</xmlData>
</mdWrap>
</digiprovMD>

我想选择具有特定值 agentIdentifierValue 的所有代理,例如 info:fda/system-v0.16.2,仅当 1. 它没有与之关联的 agentIdentifierResult 标签和 2. 如果有与之关联的 agentIdentifierResult 它的值应该是'结果'

因此,在这种情况下,应选择两个代理 digiprov-3 和 digiprov-4。我该如何为此编写xpath?

我试过这个(伪代码): (result = 结果和 value = '#{uri.content}') 或 (value = '#{uri.content}') 但这也选择了第三个代理 digiprov-5!

4

1 回答 1

1

这应该有效:

'//digiprovMD[.//agentIdentifier[./agentIdentifierValue="info:fda/system-v0.16.2"][not(./agentIdentifierResult) or ./agentIdentifierResult = "outcome"]]'

基本上,这将返回任何 digiprovMD 节点,其中包括具有指定 agentIdentifierValue 值的 agentIdentifier 节点,以及没有 agentIdentifierResult 或“outcome”的 agentIdentifierResult。

于 2012-10-12T16:51:25.233 回答