如何使用java dom从xml中删除命名空间?

2022-09-03 17:26:02

我有以下代码

DocumentBuilderFactory dbFactory_ = DocumentBuilderFactory.newInstance();
Document doc_;
DocumentBuilder dBuilder = dbFactory_.newDocumentBuilder();
StringReader reader = new StringReader(s);
InputSource inputSource = new InputSource(reader);
doc_ = dBuilder.parse(inputSource);
doc_.getDocumentElement().normalize();

那我就可以做到

doc_.getDocumentElement();

并得到我的第一个元素,但问题是而不是元素是。jobtns:job

我知道并尝试使用:

dbFactory_.setNamespaceAware(true);

但这不是我想要的,我需要一些东西来完全摆脱命名空间。

任何帮助将不胜感激,谢谢,

乔希


答案 1

使用正则表达式函数。这将解决此问题:

public static String removeXmlStringNamespaceAndPreamble(String xmlString) {
  return xmlString.replaceAll("(<\\?[^<]*\\?>)?", ""). /* remove preamble */
  replaceAll("xmlns.*?(\"|\').*?(\"|\')", "") /* remove xmlns declaration */
  .replaceAll("(<)(\\w+:)(.*?>)", "$1$3") /* remove opening tag prefix */
  .replaceAll("(</)(\\w+:)(.*?>)", "$1$3"); /* remove closing tags prefix */
}

答案 2

对于元素和属性节点:

Node node = ...;
String name = node.getLocalName();

将为您提供节点名称的本地部分。

请参阅 Node.getLocalName()