2017-03-27 66 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>