2017-03-27 64 views
0

我試圖通過使用駱駝來製作一個程序。該程序應該能夠在名爲inbox_xml_files的文件夾中接收xml文件。Apache Camel - 從XML獲取xpath值

然後,程序應該在xml文件中獲取< Country>元素節點的文本值。

如果文本值爲「丹麥」,則文件應移至名爲「outbox_Denmark」的文件夾。

如果文本值是「瑞典」,則應將文件移至名爲「outbox_Sweden」的文件夾。

如果文本值是別的東西,文件應該移動到名爲「outbox_Other」的文件夾。

這是我用於測試的XML文件:

<?xml version="1.0"?> 
<Company> 
    <Employee> 
     <FirstName>Mike</FirstName> 
     <LastName>James</LastName> 
     <ContactNo>1234567890</ContactNo> 
     <Email>[email protected]</Email> 
     <Address> 
      <Country>Denmark</Country> 
      <City>Copenhagen</City> 
      <Zip>1234</Zip> 
     </Address> 
    </Employee> 
</Company> 

駱駝xml文件(在一個我煩惱的)

<camelContext id="camelId" xmlns="http://camel.apache.org/schema/spring"> 
     <camel:route id="_route1"> 
      <camel:from id="_from1" uri="file:C:/inbox_xml_files?noop=false"/> 
      <camel:choice id="_choice1"> 
       <camel:when id="_when1"> 
        <camel:xpath> 
          //Company/Employee/Address/Country = 'Denmark' 
         </camel:xpath> 
        <camel:to id="_to1" uri="file:C:/outbox_Denmark"/> 
       </camel:when> 
       <camel:when id="_when2"> 
        <camel:xpath> 
          //Company/Employee/Address/Country = 'Sweden' 
         </camel:xpath> 
        <camel:to id="_to2" uri="file:C:/outbox_Sweden"/> 
       </camel:when> 
       <camel:otherwise id="_otherwise1"> 
        <camel:to id="_to3" uri="file:C:/outbox_Other"/> 
       </camel:otherwise> 
      </camel:choice> 
     </camel:route> 
    </camelContext> 

我相信這個問題是裏面的< camel:xpath>。我想我已經明確了它的錯誤,我正在嘗試,但所有這些對我來說都是新東西,所以我一直在努力。

+0

我不認爲你需要//公司,嘗試/公司 –

+1

更改XPath來'//公司/員工/地址/國家[。='丹麥']' – SomeDude

+0

是或是/ //公司/.../text()='丹麥'也不起作用,例如使用text()來指示xml節點中的文本。不管怎樣,它的標準xpath都會在網上搜索一些例子 –

回答

0

嘗試在輸入xml中添加名稱空間,並在路由級別定義相同的名稱空間。訪問該值時使用xpath中的名稱空間前綴。

Incase命名空間不可用使用「*:」作爲前綴來訪問xpath值。

<camel:xpath> 
         //*:Company/*:Employee/*:Address/*:Country = 'Sweden' 
        </camel:xpath> 
0

試試這個:

<camel:xpath>//Company/Employee/Address/Country='Sweden'</camel:xpath> 

<camel:xpath>//*[local-name() = 'Country' and text()='Sweden']</camel:xpath>