我正在尝试将一个默认名称空间添加到另一个名称空间中的根元素中,但XOM不喜欢这样!
e.g
<env:contentEnvelope
xmlns:env="http://data.com/Envelope/2008-05-01/"
xmlns:inv="http://Patents.data.com/2012-01-01/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">我希望inv名称空间也是默认名称空间,方法是添加例如
xmlns="http://Patents.data.com/2012-01-01/"但是XOM不会拥有它!
你有什么建议吗?
发布于 2012-08-03 18:18:21
这是一系列因素的组合,阻止了我添加默认名称空间。与IT中的大多数事情一样,解决方案很简单,但实现起来并不容易:
这里的关键是使用.addNamespaceDeclaration(“”,命名空间),并将第一个参数设置为“”这不直观我使用的.setNamespace()不起作用。
此外,我没有意识到使用以下命令创建元素:
new Element("env:CEnvelope", IConstants.ENV_NAMESPACE);在根元素中自动创建一个名称空间xmlns:env;我再次显式地这样做了;这不会造成问题,但是如果您在此之后使用.addNamespaceDeclaration(“”,namespace),它将不起作用。
带**的行就是您需要的全部内容:
private void setRoot(){
Element root = new Element("env:CEnvelope", IConstants.ENV_NAMESPACE);
//Add root Element to the Document
this.doc = new Document(root);
root.addNamespaceDeclaration("xsi", IConstants.XSI_NAMESPACE);
**root.addNamespaceDeclaration("", IConstants.PAT_NAMESPACE);
//root.setNamespaceURI(IConstants.PAT_NAMESPACE);
//root.addNamespaceDeclaration("env", IConstants.ENV_NAMESPACE);哦,是的,我不需要inv名称空间,因为它与默认名称空间相同!
干杯:-)
https://stackoverflow.com/questions/11689863
复制相似问题