我们是否需要在父级别上提供子标记时为其提供xml前缀

时间:2015-04-01 16:03:30

标签: xml apache-camel xml-namespaces

这是其中一个样本中提供的默认camel-context。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:camel="http://camel.apache.org/schema/spring"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

   <camel:camelContext xmlns="http://camel.apache.org/schema/spring" id="sampleCamelContext">    
    <camel:route>
      <camel:from uri="file:src/data?noop=true"/>
      <camel:choice>
        <camel:when>
          <camel:xpath>/person/city = 'London'</camel:xpath>
          <camel:log message="UK message"/>
          <camel:to uri="file:target/messages/uk"/>
        </camel:when>
        <camel:otherwise>
          <camel:log message="Other message"/>
          <camel:to uri="file:target/messages/others"/>
        </camel:otherwise>
      </camel:choice>
    </camel:route>
  </camel:camelContext>
</beans>

既然提供了camel:camelContext的默认ns,我们是否也需要在子标签中指定前缀?

这不会起作用吗? (如https://stackoverflow.com/a/25789100/1873328中提到的)

<camel:camelContext xmlns="http://camel.apache.org/schema/spring" id="sampleCamelContext">    
    <route>
      <from uri="file:src/data?noop=true"/>
      <choice>
        <when>
          <xpath>/person/city = 'London'</camel:xpath>
          <log message="UK message"/>
          <to uri="file:target/messages/uk"/>
        </when>        
      </choice>
    </route>
</camel:camelContext>

也许,我不能正确理解xml命名空间。关于命名空间如何作为奖励的任何详细解释将不胜感激。

1 个答案:

答案 0 :(得分:1)

以下两个事实为您提供答案:

  • 子节点使用来自最近父节点的xmlns声明。
  • 前缀文字(例如camel)并不重要 - 唯一重要的是它引用的命名空间。如果不同的前缀引用相同的命名空间,则它们可以互换使用,而且前缀也不是前缀(空的)。

因为xmlns上的camel:camelContext声明引用了与xmlns:camel声明相同的命名空间,所以如果省略camel:这些子节点,则无关紧要,在这两种情况下,它们都将列在http://camel.apache.org/schema/spring命名空间中。