фон
Глядя извлечь элементы из следующего содержания XML:Удаление имен с выхода XMLStarlet
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:inputText id="id"/>
...
</ui:composition>
Extraction
Всех h:inputText
элементов может быть выбран с помощью:
xmlstarlet sel -t -c "//h:inputText" filename.xml
Задача
Это производит следующие пространства имен кишащего выход:
<h:inputText
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets" id="id"/>
Вопрос
Как пространства имен быть подавлены с выхода?
Идеи
Использование регулярных выражений для последующей обработки; однако:
- sed не имеет неживого соответствия;
- perl слишком тяжеловес (и для него потребуется сложное регулярное выражение).
Проложить через xmllint или xmlstarlet для второго прохода, но для этого требуется хорошо сформированный XML-документ.
Использование xmllint создает свой собственный набор проблем с пространством имен.
Подготовить документ, состоящий только из ui:composition
и h:inputText
элементов:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:inputText id="id"/>
<h:inputText id="id"/>
</ui:composition>
Это сложно, так как h:inputText
элементы могут иметь место на любой глубине документа.
Не уверен, что JSF должен сделать с чем угодно, но если ваше редактирование поможет вам, я не откажусь. –