Я хотел бы удалить атрибут xmlns
из следующей строки XML. Я написал программу java
, но не уверен, что она делает то, что нужно сделать здесь.Как удалить атрибут xmlns из корневого элемента в xml и java
Как удалить атрибут xmlns
и получить измененную строку xml?
Входная строка XML:
<?xml version="1.0" encoding="UTF-8"?>
<Payment xmlns="http://api.com/schema/store/1.0">
<Store>abc</Store>
</Payment>
Ожидаемый XML Выходная строка:
<?xml version="1.0" encoding="UTF-8"?>
<Payment>
<Store>abc</Store>
</Payment>
Java Класс:
public class XPathUtils {
public static void main(String[] args) {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Payment xmlns=\"http://api.com/schema/store/1.0\"><Store>abc</Store></Payment>";
String afterNsRemoval = removeNameSpace(xml);
System.out.println("afterNsRemoval = " + afterNsRemoval);
}
public static String removeNameSpace(String xml) {
try {
System.out.println("before xml = " + xml);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource inputSource = new InputSource(new StringReader(xml));
Document xmlDoc = builder.parse(inputSource);
Node root = xmlDoc.getDocumentElement();
NodeList rootchildren = root.getChildNodes();
Element newroot = xmlDoc.createElement(root.getNodeName());
for (int i = 0; i < rootchildren.getLength(); i++) {
newroot.appendChild(rootchildren.item(i).cloneNode(true));
}
xmlDoc.replaceChild(newroot, root);
return xmlDoc.toString();
} catch (Exception e) {
System.out.println("Could not parse message as xml: " + e.getMessage());
}
return "";
}
}
Выход:
before xml = <?xml version="1.0" encoding="UTF-8"?><Payment xmlns="http://api.com/schema/store/1.0"><Store>abc</Store></Payment>
afterNsRemoval = [#document: null]
Почему бы вам не использовать выражение XPath, чтобы помочь решению узлов атрибутов ... в ВТД-XML эта задача является эффективным 10 строк короткого кода ... –
я буду более чем счастлив, чтобы попробовать его , Любые указатели на то, как это можно реализовать? – user2325154
gimme несколько минут ... красота с xpath заключается в том, что вы можете эффективно удалить все атрибуты по вашему выбору ... даже для очень сложного документа ... xpath не более чем «// @ *» ... –