2017-04-13 7 views
0

sed、egrep、awkなどのシェルコマンドを使用して複雑な構造のXMLファイルからいくつかのフィールドを取得しようとしましたが、失敗しました。ホストID;名フォルダ名、ホスト1、ホスト2Bash:複雑なXMLファイルからフィールドを取得する

:私は出力を取得したい

<Task ID="186155128" Name="Partner: test" Active="1" NextEID="14" AR="0"> 
     <Schedules> 
      <Schedule OnlyUntilFirstSuccess="0" FailIfNoSuccessInSched="0" RunEvenIfNotif="0"> 
       <Days> 
        <DayOfWeek>Monday</DayOfWeek> 
        <DayOfWeek>Tuesday</DayOfWeek> 
        <DayOfWeek>Wednesday</DayOfWeek> 
        <DayOfWeek>Thursday</DayOfWeek> 
        <DayOfWeek>Friday</DayOfWeek> 
        <DayOfWeek>Saturday</DayOfWeek> 
        <DayOfWeek>Sunday</DayOfWeek> 
       </Days> 
       <Frequency> 
        <Interval StartTime="00:00" EndTime="23:59" EveryMinutes="15"/> 
       </Frequency> 
      </Schedule> 
     </Schedules> 
     <Destination HostID="1027635962" Type="AS2" UseDefPartner="1" UseDefRetryCount="1" UseDefRetryTimeoutSecs="1" Filename="[OrigName]" RequestMDN="1" RequestSigned="0" /> 
     <Source HostID="165429109" Type="siLock" FolderID="" FolderType="-1" FolderName="home/test" FileMask="*.*" DeleteOrig="1" NewFilesOnly="0" SearchSubdirs="0" Unzip="0" /> 

</Task> 

<MyID="1027635962" Host1="myhost" DefPartnerURL="https://site.site.com" Password="!s!f7xtVc=="/> 
<FID="165429109" DotNET="1" Name="mytest" Host2="testy.com" Port="443" /> 

:ここ

は、私のファイルfile.xmlの構造は、(それが異なる値で何度も繰り返されています)です

アイデア?

ありがとうございます。

+2

XMLパーサー(xmllint、xmlstarlet ...)を使用します。 – Cyrus

+0

vaild XMLファイルを表示します。あなたの質問にあなたの希望する出力を加えてください。 – Cyrus

+0

@Cyrusありがとうございました。編集 – GreenX

答えて

0

(無効な)文字列<MyID="1027635962" Host1="myhost"/>の代わりに(有効な)文字列<MyID id="1027635962" Host1="myhost"/>とし、これらのデータムが両方とも有効な文書の一部であると仮定した場合、これは次のようになります。

xmlstarlet sel -t -m '//Task' \ 
    -v ./@Name -o ';' \ 
    -v ./Source/@HostID -o ';' \ 
    -v ./Destination/@Filename -o ';' \ 
    -v '//MyID[@id=./Destination/HostID]/@Host1' -o ';' \ 
    -v '//FID[@id=./Source/HostID]/@Host2' -n \ 
    <in.xml >out.txt 
+0

ありがとうございました! – GreenX

関連する問題