如果已经在父级提供了 xml 前缀,我们是否需要为子标签提供前缀
do we need to give xml prefix to child tags when it is already provided on the parent level
这是其中一个示例中提供的默认 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,我们是否还需要在子标签中指定前缀?
这不行吗? (如 中提到的)
<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 命名空间。任何关于命名空间如何作为奖励工作的详细解释将不胜感激。
下面两个事实给你答案:
- 子节点使用最近的父节点的
xmlns
声明。
- 前缀文字(例如
camel
)无关紧要 - 唯一重要的是它引用的命名空间。如果不同的前缀引用同一个命名空间,它们可以互换使用,没有前缀也是一个前缀(空的)。
因为您在 camel:camelContext
上的 xmlns
声明引用了与 xmlns:camel
声明相同的名称空间,所以如果您为这些子节点省略 camel:
或不会,在这两种情况下,它们都会在 http://camel.apache.org/schema/spring
命名空间中列出。
这是其中一个示例中提供的默认 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,我们是否还需要在子标签中指定前缀?
这不行吗? (如 中提到的)
<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 命名空间。任何关于命名空间如何作为奖励工作的详细解释将不胜感激。
下面两个事实给你答案:
- 子节点使用最近的父节点的
xmlns
声明。 - 前缀文字(例如
camel
)无关紧要 - 唯一重要的是它引用的命名空间。如果不同的前缀引用同一个命名空间,它们可以互换使用,没有前缀也是一个前缀(空的)。
因为您在 camel:camelContext
上的 xmlns
声明引用了与 xmlns:camel
声明相同的名称空间,所以如果您为这些子节点省略 camel:
或不会,在这两种情况下,它们都会在 http://camel.apache.org/schema/spring
命名空间中列出。