Apache Camel - 从XML中获取xpath值

3
我正在使用camel制作一个程序。该程序应该能够接收文件夹inbox_xml_files中的XML文件。
然后,程序应该获取XML文件内元素节点的文本值。
如果文本值是“Denmark”,则将文件移动到名为“outbox_Denmark”的文件夹中。
如果文本值是“Sweden”,则将文件移动到名为“outbox_Sweden”的文件夹中。
如果文本值是其他内容,则将文件移动到名为“outbox_Other”的文件夹中。
这是我用于测试的XML文件:
    <?xml version="1.0"?>
<Company>
  <Employee>
      <FirstName>Mike</FirstName>
      <LastName>James</LastName>
      <ContactNo>1234567890</ContactNo>
      <Email>oy@hotmail.com</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>标签内。我觉得我定义错误了,尽管我正在努力解决,但这对我来说是新的东西,所以我很困难。


我不认为你需要 //Company,尝试使用 /Company。 - Imran Saeed
1
将xpath更改为//Company/Employee/Address/Country[.='丹麦'] - SomeDude
是的,或者使用 //Company/.../text() = 'Denmark' 也可以,例如使用 text() 指示 xml 节点中的文本。无论如何,这是标准的 xpath,所以去搜索一些例子吧。 - Claus Ibsen
2个回答

5
试试这个:
<camel:xpath>//Company/Employee/Address/Country='Sweden'</camel:xpath>

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

0

尝试在输入的XML中添加命名空间,并在路由级别定义相同的命名空间。在访问值时,在XPath中使用命名空间前缀。

如果命名空间不可用,请使用“*:”作为前缀来访问XPath值。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接