Вы могли выполнить его через жемчуг.
export CLEANSTRING=$(perl -e 'print join( q//, map { s/\\s+/_/g; lc } split /[^\\s\\w]+/, \$ENV{STRING} )')
я использую подоболочку ksh-стиля здесь, я не полностью уверен, что она работает в ударе.
Это - хорошая вещь об оболочке, то, что можно использовать жемчуг, awk, sed, grep....
Помимо установки префикса, вы также должны объявить где-нибудь свое пространство имен.
[EDIT] Если вы посмотрите на пакет org.w3c.dom
, вы заметите, что нет никакой поддержки пространств имен, за исключением того, что вы можете создать узел документа с URI пространства имен:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
DOMImplementation DOMImplementation = builder.getDOMImplementation();
Document doc = DOMImplementation.createDocument(
"http://www.somecompany.com/2005/xyz", // namespace
"root",
null /*DocumentType*/);
Element root = doc.getDocumentElement();
root.setPrefix("xyz");
root.setAttribute(
"xmlns:xyz",
"http://www.somecompany.com/2005/xyz");
Со стандартным API W3C DOM Java 5 (и выше) невозможно изменить пространство имен узла.
Но W3C DOM API - это всего лишь пара интерфейсов. Итак, что вы должны попробовать, так это посмотреть на реализацию (то есть на фактический класс вашего экземпляра документа), привести его к реальному типу. У этого типа должны быть дополнительные методы, и если вам повезет, вы можете использовать их для изменения пространства имен.
Ну, вот рекурсивное "решение":
(я все еще надеюсь, что кто-то может найти лучший способ сделать это)
public static void renameNamespaceRecursive(Document doc, Node node,
String namespace) {
if (node.getNodeType() == Node.ELEMENT_NODE) {
System.out.println("renaming type: " + node.getClass()
+ ", name: " + node.getNodeName());
doc.renameNode(node, namespace, node.getNodeName());
}
NodeList list = node.getChildNodes();
for (int i = 0; i < list.getLength(); ++i) {
renameNamespaceRecursive(doc, list.item(i), namespace);
}
}
Кажется, работает, хотя я не знать, правильно ли переименовывать только тип узла ELEMENT_NODE , или если необходимо переименовать другие типы узлов.