使用JOOX和XPATH(JAVA)使用2个条件过滤XML

时间:2016-02-25 09:47:46

标签: java xml parsing xpath joox

我有很多要过滤的xml文件,我需要使用JOOX来完成。我正在使用它与XPATH过滤一个条件,但我需要至少两个条件,我想成为一个动态过滤,我可以添加更多的过滤器,如果它的请求,但至少我需要两个。先验我不知道xml的结构,也许两个条件引用兄弟节点。我的xml的结构是这样的:

<Message>
   <Header>
      <SequenceNumber>12345</SequenceNumber>
      <OriginSystem>xxx</OriginSystem>
      <Timestamp>141</Timestamp>
      <ContentType>123</ContentType>
   </Header>
   <OriginCenter>
      <CR id="xx" />
      <LI id="We" />
   </OriginCenter>
   <MessageType>
      <Type1 id="myId">
         <Id>LAV6.OIR.282O</Id>
         <TimeStampValue value="1430275652165" />
         <State>
            <UpToDate value="YES" />
            <InterlockedRoute value="YES" routeType="Itinerario" />
            <Sliding value="NOT" routeType="" />
            <Blocked value="NOT" />
            <Plaques>
               <PlaqueO value="NOT" counter="0" />
               <PlaqueV value="NOT" />
            </Plaques>
            <Dual value="YES" active="YES" />
         </State>
         <Flights number="1">
            <Flight index="1" Id="09070" />
         </Flights >
      </Type1>
   </MessageType>
   <Optionals>
      <Parameter1 name="" value="" />
      <Parameter2 name="" value="" />
      <Parameter3 name="" value="" />
   </Optionals>
</Message>

示例可能是:找到 PlaqueV 具有属性且值已阻止的所有消息>具有的属性,其值为 NOT

我会用xpath知道结构的深度://Blocked[@value='NOT']/../Plaques/PlaqueV[@value='NOT']

在不知道结构的情况下,我怎样才能做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:0)

谢谢splash58,我终于解决了它创建一个动态字符串并将其传递给JOOX。

我的意思是:JOOX.$(file).xpath(conditions);

where条件是我使用你的建议创建的动态字符串:

Root[.//TAG[@property='value'] and .//TAG[content='value'] and...]