【发布时间】:2012-10-12 15:58:36
【问题描述】:
我正在处理以下 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,它的值应该是'outcome'
所以在这种情况下,应该选择两个代理,digiprov-3 和 digiprov-4。 如何为此编写 xpath?
我试过这个(伪代码): (result = 结果和 value = '#{uri.content}') 或 (value = '#{uri.content}') 但这也选择了第三个代理 digiprov-5!
【问题讨论】:
-
XML 是否正确? 'digiprov-5' 应该有两个 agentIdentifier 节点吗?
-
@JustinKo:是的,xml 是正确的。它应该有两个 agentIdentifier 节点
标签: ruby libxml2 libxml-ruby