如何使用xpath或xquery在父节点中基于其兄弟元素提取元素的值?

时间:2017-03-29 21:07:15

标签: xml xpath xquery

我有一个像这样的有效载荷,

<Payload> 
  <Identifier> 
    <Type>typeA</Type>  
    <Value>valueOfA</Value> 
  </Identifier>  
  <Identifier> 
    <Type>typeB</Type>  
    <Value>valueOfB</Value> 
  </Identifier> 
</Payload>

我想使用xpath或xquery提取元素'typeA'的值以继续进行,以便我的转换后的有效负载看起来像这样

<transformedPayload>
<typeA>valueOfA</typeA>
<typeB><valueOfB</typeB>
</transformedPayload>

请帮忙。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

这在XQuery中非常容易实现。以下查询执行您想要的操作:

<transformedPayload>{
  for $ident in /Payload/Identifier
  return element { $ident/Type } { $ident/Value/text() }
}</transformedPayload>

如果您只想选择所有Identifier的子集,可以使用where子句:

<transformedPayload>{
  for $ident in /Payload/Identifier
  where $ident/Type eq 'typeA'
     or $ident/Type eq 'typeB'
  return element { $ident/Type } { $ident/Value/text() }
}</transformedPayload>

您还可以使用=运算符及其存在语义来使其更紧凑:

<transformedPayload>{
  for $ident in /Payload/Identifier
  where $ident/Type = ('typeA', 'typeB')
  return element { $ident/Type } { $ident/Value/text() }
}</transformedPayload>