子タグ付きタグ間のコンテンツの抽出

子タグ付きタグ間のコンテンツの抽出

「xmlstarlet」、「sed」、「awk」などのツールを使用して、必要な内容をファイルから抽出します。プロセスは特定のビジネスプロセスのフルネームを参照し、その特定のビジネスプロセス間のコンテンツのみを抽出する必要があります。

コンテンツを抽出するファイルです。

 <businessProcesses>
        <fullName>Customer Support</fullName>
        <description>Use for Customer Support, TDG and Port</description>
        <isActive>true</isActive>
        <values>
            <fullName>Action Item</fullName>
            <default>false</default>
        </values>
        <values>
            <fullName>Solved</fullName>
            <default>false</default>
        </values>
    </businessProcesses>
    <businessProcesses>
        <fullName>Customer Support - Port</fullName>
        <description>Telecom team use only</description>
        <isActive>true</isActive>
        <values>
            <fullName>New</fullName>
            <default>true</default>
        </values>
        <values>
            <fullName>Open</fullName>
            <default>false</default>
        </values>
    </businessProcesses>
</CustomObject>    

希望の出力。

<businessProcesses>
        <fullName>Customer Support - Port</fullName>
        <description>Telecom team use only</description>
        <isActive>true</isActive>
        <values>
            <fullName>New</fullName>
            <default>true</default>
        </values>
        <values>
            <fullName>Open</fullName>
            <default>false</default>
        </values>
    </businessProcesses> 

ベストアンサー1

XMLの形式が正しいと仮定すると(例には開くCustomObjectタグはありません)

$ xmlstarlet sel -t -c '//businessProcesses[fullName="Customer Support - Port"]' -nl  file.xml
<businessProcesses>
        <fullName>Customer Support - Port</fullName>
        <description>Telecom team use only</description>
        <isActive>true</isActive>
        <values>
            <fullName>New</fullName>
            <default>true</default>
        </values>
        <values>
            <fullName>Open</fullName>
            <default>false</default>
        </values>
    </businessProcesses>

businessProcessesこれは、子ノードの正確な値を持つノードのコピーを抽出するXPATHクエリでXMLStarletを使用します。fullNameCustomer Support - Port

最後に、出力-nlに改行文字を追加します。


XMLStarletや他の構造化文書型パーサーを、などの行ベースのテキスト操作ツールとsed比較しないでくださいawk

おすすめ記事