Java 防止JDOM2创建xmlns="&引用;
我尝试使用JDOM2将新的Java 防止JDOM2创建xmlns="&引用;,java,jdom,jdom-2,Java,Jdom,Jdom 2,我尝试使用JDOM2将新的元素添加到persistence.xml文件中 persistenceUnitEl.add(new Element("class").addContent(className)); 问题是jdom2总是将xmlns=”“添加到元素中 我怎样才能防止这种情况 removeAttribute(“xmlns”)不起作用,removeNameSpace(el.getNameSpace())也不起作用。JDOM仅在将子元素添加到已在命名空间中的其他元素时添加xmlns=”“。X
元素添加到persistence.xml文件中
persistenceUnitEl.add(new Element("class").addContent(className));
问题是jdom2总是将xmlns=”“
添加到
元素中
我怎样才能防止这种情况
removeAttribute(“xmlns”)
不起作用,removeNameSpace(el.getNameSpace())
也不起作用。JDOM仅在将子元素添加到已在命名空间中的其他元素时添加xmlns=”“
。XML中的默认名称空间是没有前缀的名称空间。在以下示例中:
<root>
<child />
</root>
请注意,上面示例中的根元素和子元素位于名称空间http://mynamespace
,并且该名称空间具有前缀ns
。上述代码在语义上与(与)相同:
及
在上面的例子中,PersistenceUnit
位于命名空间…something..
中。现在,您要求JDOM向文档中添加元素新元素(“类”)
,因此您得到:
<tagname xmlns="...something....">
<PersistenceUnit>
<class xmlns="" />
</PersistenceUnit>
</tagname>
现在,真正的问题是“class”元素是否实际属于与父元素相同的名称空间。但这是一个只有你才能回答的问题
资源:
- 文件
xmlns=”“
。XML中的默认名称空间是没有前缀的名称空间。在以下示例中:
<root>
<child />
</root>
请注意,上面示例中的根元素和子元素位于名称空间http://mynamespace
,并且该名称空间具有前缀ns
。上述代码在语义上与(与)相同:
及
在上面的例子中,PersistenceUnit
位于命名空间…something..
中。现在,您要求JDOM向文档中添加元素新元素(“类”)
,因此您得到:
<tagname xmlns="...something....">
<PersistenceUnit>
<class xmlns="" />
</PersistenceUnit>
</tagname>
现在,真正的问题是“class”元素是否实际属于与父元素相同的名称空间。但这是一个只有你才能回答的问题
资源:
- 文件
- 据我所知,我认为这就是你想要的
<RootTagname xmlns="...some namespace....">
<SubTag>
<NewElement yourAttrib="1"/>
</SubTag>
</RootTagname >
这是完整的代码
Namespace namespace = Namespace.getNamespace("prefix", ".....some namespace....");
XPathBuilder<Element> subTagXpathelementBuilder = new XPathBuilder<Element>("//prefix:SubTag", Filters.element());
subTagXpathelementBuilder.setNamespace(namespace);
XPathFactory xpathFactory = XPathFactory.instance();
Document doc = (Document) builder.build(xmlFile);
XPathExpression<Element> xpath = subTagXpathelementBuilder .compileWith(xpathFactory);
List<Element> subElementsList = xpath.evaluate(doc);
for (Element subElement : subElementsList ) {
Element newElement = new Element("NewElement", subElement.getNamespace());
List<Attribute> newElementAttribList = newElement.getAttributes();
newElementAttribList .add(new Attribute("yourAttrib", "1"));
subElement .addContent(newElement);
}
Namespace Namespace=Namespace.getNamespace(“前缀”、“…某些名称空间…”);
XPathBuilder子标记XPathElementBuilder=新XPathBuilder(“//前缀:SubTag”,Filters.element());
subTagXpathelementBuilder.setNamespace(名称空间);
XPathFactory XPathFactory=XPathFactory.instance();
documentdoc=(Document)builder.build(xmlFile);
XPathExpression xpath=subTagXpathelementBuilder.compileWith(xpathFactory);
List subElementsList=xpath.evaluate(doc);
for(元素子元素:子元素列表){
Element newElement=newElement(“newElement”,subElement.getNamespace());
List newElementAttribList=newElement.getAttributes();
添加(新属性(“yourAttrib”、“1”);
subElement.addContent(newElement);
}
据我所知,我认为这就是你想要的
<RootTagname xmlns="...some namespace....">
<SubTag>
<NewElement yourAttrib="1"/>
</SubTag>
</RootTagname >
这是完整的代码
Namespace namespace = Namespace.getNamespace("prefix", ".....some namespace....");
XPathBuilder<Element> subTagXpathelementBuilder = new XPathBuilder<Element>("//prefix:SubTag", Filters.element());
subTagXpathelementBuilder.setNamespace(namespace);
XPathFactory xpathFactory = XPathFactory.instance();
Document doc = (Document) builder.build(xmlFile);
XPathExpression<Element> xpath = subTagXpathelementBuilder .compileWith(xpathFactory);
List<Element> subElementsList = xpath.evaluate(doc);
for (Element subElement : subElementsList ) {
Element newElement = new Element("NewElement", subElement.getNamespace());
List<Attribute> newElementAttribList = newElement.getAttributes();
newElementAttribList .add(new Attribute("yourAttrib", "1"));
subElement .addContent(newElement);
}
Namespace Namespace=Namespace.getNamespace(“前缀”、“…某些名称空间…”);
XPathBuilder子标记XPathElementBuilder=新XPathBuilder(“//前缀:SubTag”,Filters.element());
subTagXpathelementBuilder.setNamespace(名称空间);
XPathFactory XPathFactory=XPathFactory.instance();
documentdoc=(Document)builder.build(xmlFile);
XPathExpression xpath=subTagXpathelementBuilder.compileWith(xpathFactory);
List subElementsList=xpath.evaluate(doc);
for(元素子元素:子元素列表){
Element newElement=newElement(“newElement”,subElement.getNamespace());
List newElementAttribList=newElement.getAttributes();
添加(新属性(“yourAttrib”、“1”);
subElement.addContent(newElement);
}
谢谢!!你的解释帮助我理解了名称空间是如何工作的。这个答案应该被认为是正确的答案(即使在3年后)。谢谢!!你的解释帮助我理解了名称空间是如何工作的。这个答案应该被认为是正确的答案(即使3年后)。
Namespace parentNamespace = persistenceUnitEl.getNamespace();
persistenceUnitEl.add(new Element("class", parentNamespace).addContent(className));
<RootTagname xmlns="...some namespace....">
<SubTag>
<NewElement yourAttrib="1"/>
</SubTag>
</RootTagname >
<RootTagname xmlns="...some namespace....">
<SubTag>
<NewElement xmlns="" yourAttrib="1"/>
</SubTag>
</RootTagname >
Element newElement = new Element("NewElement", subElement.getNamespace());
Namespace namespace = Namespace.getNamespace("prefix", ".....some namespace....");
XPathBuilder<Element> subTagXpathelementBuilder = new XPathBuilder<Element>("//prefix:SubTag", Filters.element());
subTagXpathelementBuilder.setNamespace(namespace);
XPathFactory xpathFactory = XPathFactory.instance();
Document doc = (Document) builder.build(xmlFile);
XPathExpression<Element> xpath = subTagXpathelementBuilder .compileWith(xpathFactory);
List<Element> subElementsList = xpath.evaluate(doc);
for (Element subElement : subElementsList ) {
Element newElement = new Element("NewElement", subElement.getNamespace());
List<Attribute> newElementAttribList = newElement.getAttributes();
newElementAttribList .add(new Attribute("yourAttrib", "1"));
subElement .addContent(newElement);
}