背景
次のXMLコンテンツから要素を抽出するために探している相手:削除、名前空間
<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>
抽出
すべて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はあまりにも重すぎます(複雑な正規表現が必要です)。
2回目のパスで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わかりませんあなたの編集があなたを助けたら、私は元に戻っていません。 –