Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheCamel-从XML获取xpath值_Java_Xml_Xpath_Apache Camel_File Transfer - Fatal编程技术网

Java ApacheCamel-从XML获取xpath值

Java ApacheCamel-从XML获取xpath值,java,xml,xpath,apache-camel,file-transfer,Java,Xml,Xpath,Apache Camel,File Transfer,我正试图用camel做一个程序。此程序应该能够接收名为“收件箱xml文件”的文件夹中的xml文件 然后程序应该获取xml文件中元素节点的文本值 如果文本值为“丹麦”,则应将文件移动到名为“发件箱\丹麦”的文件夹中 如果文本值为“瑞典”,则应将文件移动到名为“发件箱\瑞典”的文件夹中 如果文本值是其他值,则应将文件移动到名为“发件箱\其他”的文件夹中 这是我用于测试的XML文件: <?xml version="1.0"?> <Company> <Emplo

我正试图用camel做一个程序。此程序应该能够接收名为“收件箱xml文件”的文件夹中的xml文件

然后程序应该获取xml文件中元素节点的文本值

如果文本值为“丹麦”,则应将文件移动到名为“发件箱\丹麦”的文件夹中

如果文本值为“瑞典”,则应将文件移动到名为“发件箱\瑞典”的文件夹中

如果文本值是其他值,则应将文件移动到名为“发件箱\其他”的文件夹中

这是我用于测试的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>

迈克
詹姆斯
1234567890
oy@hotmail.com
丹麦
哥本哈根
1234
骆驼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>

//公司/员工/地址/国家='丹麦'
//公司/员工/地址/国家='瑞典'

我认为问题出在内部。我想我定义错了,我正在尝试,但所有这些对我来说都是新的东西,所以我正在努力解决它。

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

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

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

//*:公司/*:员工/*:地址/*:国家='瑞典'
试试这个:

<camel:xpath>//Company/Employee/Address/Country='Sweden'</camel:xpath>
//公司/员工/地址/国家/瑞典'

/*[local-name()='Country'和text()='Sweden']

我认为您不需要//Company,请尝试/Company将xpath更改为
//Company/Employee/Address/Country[.='danmer']
是的,`///Company/../text()='danmer'也不起作用,例如使用text()来指示xml节点中的文本。不管怎样,它都是标准的xpath,所以在互联网上搜索一些例子吧
<camel:xpath>//*[local-name() = 'Country' and text()='Sweden']</camel:xpath>