在Java中从XML中删除命名空间

我想从Java中删除XML中的命名空间。 你能指导一下需要做什么吗? 可以使用DOM解析器,但这将是一个节点解析的节点。 我想知道是否有一些代码可以从整个XML中删除所有命名空间( mig:

我的XML:

           funcCode FLT000204 Function Y     submit FBT000000       cancel FBT000001         Text Field rptNum FLT006718 Report No. Y   FinTextInputWithSearcher reportNo FLT005821 Report No. Y     Desc. Label rptDesc  N   FinTextInput desc FLT000690 Description       rptDesc FLT002771 Description Y     rptType FLT007124 Report Type Y       reporttype FLT005818 Report Type Y     FinComboBox printRep FLT011541      

您可以使用xslt。 尝试

removeNs.xslt

               

Sample.java

 import java.io.File; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; public class Sample { public static void main(String[] args) { try{ TransformerFactory factory = TransformerFactory.newInstance(); Source xslt = new StreamSource(new File("removeNs.xslt")); Transformer transformer = factory.newTransformer(xslt); Source text = new StreamSource(new File("data.xml")); transformer.transform(text, new StreamResult(new File("output.xml"))); System.out.println("Done"); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } } } 

可以使用正则表达式来获取更多信息

 public static string RemoveAllXmlNamespace(string xmlData) { string xmlnsPattern = "\\s+xmlns\\s*(:\\w)?\\s*=\\s*\\\"(?[^\\\"]*)\\\""; MatchCollection matchCol = Regex.Matches(xmlData, xmlnsPattern); foreach (Match m in matchCol) { xmlData = xmlData.Replace(m.ToString(), ""); } return xmlData; } } 

你可以在这里找到类似的例子

正则表达式可能会很痛苦。 你也可以使用这个api(dom)来摆脱所有命名空间。 参考这个

  import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; ... /** * Recursively renames the namespace of a node. * @param node the starting node. * @param namespace the new namespace. Supplying null removes the namespace. */ public static void renameNamespaceRecursive(Node node, String namespace) { Document document = node.getOwnerDocument(); if (node.getNodeType() == Node.ELEMENT_NODE) { document.renameNode(node, namespace, node.getNodeName()); } NodeList list = node.getChildNodes(); for (int i = 0; i < list.getLength(); ++i) { renameNamespaceRecursive(list.item(i), namespace); } }