Axiom OMElement生成具有空默认名称空间的子项

时间:2015-01-26 18:41:27

标签: xml xml-parsing xml-namespaces axiom

嗨,这就是我为生成xml代码所做的工作:

OMFactory factory = OMAbstractFactory.getOMFactory();
OMNamespace nsSequence = factory.createOMNamespace("http://ws.apache.org/ns/synapse", "");
OMElement rootSequence = factory.createOMElement("sequence",nsSequence);


/*<FILTER>*/
OMNamespace nsFilter = factory.createOMNamespace("http://org.apache.synapse/xsd", "ns");        
OMElement filter = factory.createOMElement("filter",nsFilter);
OMAttribute regex = factory.createOMAttribute("regex", null, "applID");
OMAttribute source = factory.createOMAttribute("source", null, "get-property('applicationID')");

filter.addAttribute(regex);
filter.addAttribute(source);

/*<THEN>*/
OMElement then = factory.createOMElement("then",null);          

filter.addChild(then);
rootSequence.addChild(filter);

生成的代码就像这样:

<sequence xmlns="http://ws.apache.org/ns/synapse">
    <ns:filter xmlns:ns="http://org.apache.synapse/xsd" regex="APPP" source="get-property('applicationID')">
        <then xmlns=""></then>
    </ns:filter>
</sequence>

XMLNS =&#34;&#34;在THEN元素中对我来说是个大问题。

我正在使用axiom-api 1.2.14 ......我在某处读到这是其他人遇到的问题(bug)(也许已经解决了?)。 有没有办法解决这个问题,以获得干净的xml代码?或者更好地解决它?

1 个答案:

答案 0 :(得分:0)

您正在创建没有命名空间的then元素:

OMElement then = factory.createOMElement("then", null);

因此Axiom会生成xmlns="",因此该元素没有命名空间,完全按照您的要求生成。实际上,如果没有xmlns="",元素将具有默认的命名空间http://ws.apache.org/ns/synapse,这将是错误的。

如果您认为名称空间声明是错误的,那么这可能意味着该元素实际上应该属于文档中使用的其他名称空间之一。如果是这种情况,那么您应该修复代码以在正确的命名空间中请求一个元素。