Unixを介してXMLファイルにコメントタグを追加する

Unixを介してXMLファイルにコメントタグを追加する

入力XMLファイル:

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<Dcn xmlns="http://schemas.test.com/2013/ClaimRequest" xsi:schemaLocation="http://schemas.test.com/2013/ClaimRequest gdhjf/profiles/Redirect/dhd/Desktop/dhd_Prof.XSD" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Header sendingSystemId="XYC" receivingSystemId="ABC" version="2.0" createDateTime="2019-01-19T04:27:15" batchingControlNumber="AZ042018" transType="ClaimRequest" dcn="1901959351"/>
  <Body>
    <ClaimRequest>
      <Claims>
        <ProfessionalClaim paymentIndicator="P" claimProcessedDateTime="20180409120000102" claimEndDate="2018-04-02" claimStartDate="2018-04-02" sourceSystemId="abcd" claimActionCode="00">
          <PayToProvider id="54321"/>
          <Patient eligSysId="dhhgs1" clientId="VBV"/>
          <ClaimLines>
            <ClaimLine sourceSystemClaimLineNumber="1" />
            <ClaimLine sourceSystemClaimLineNumber="2" />
            <ClaimLine sourceSystemClaimLineNumber="3" />
          </ClaimLines>
          <ClaimTrailer claimDetailLineCount="3"/>
        </ProfessionalClaim>
         <ProfessionalClaim paymentIndicator="P" claimProcessedDateTime="20180430120000277" claimEndDate="2018-04-12" claimStartDate="2018-04-12" sourceSystemId="abcd" claimActionCode="00">
          <PayToProvider id="54673"/>
          <Patient eligSysId="dhhgs1" clientId="VBV"/>
          <ClaimLines>
            <ClaimLine sourceSystemClaimLineNumber="1" />
          </ClaimLines>
          <ClaimTrailer claimDetailLineCount="1"/>
        </ProfessionalClaim>
        <ProfessionalClaim paymentIndicator="P" claimProcessedDateTime="20180430120000279" claimEndDate="2018-04-17" claimStartDate="2018-04-17" sourceSystemId="abcd" claimActionCode="00">
          <PayToProvider id="676543"/>
          <Patient lastName="CLARK" memberId="U1672936601" firstName="DANIEL" eligSysId="CNCIEDW1" clientId="CNC"/>
          <ClaimLines>
            <ClaimLine  sourceSystemClaimLineNumber="1" />
            <ClaimLine  sourceSystemClaimLineNumber="2" />
          </ClaimLines>
          <ClaimTrailer claimDetailLineCount="2"/>
        </ProfessionalClaim>
        <ProfessionalClaim paymentIndicator="P" claimProcessedDateTime="20180430120000281" claimEndDate="2018-04-17" claimStartDate="2018-04-17" sourceSystemId="abcd" claimActionCode="00">
          <PayToProvider id="653473"/>
          <Patient lastName="VAUGHN" memberId="U1677077501" firstName="KAREN" eligSysId="CNCIEDW1" clientId="CNC"/>
          <ClaimLines>
            <ClaimLine sourceSystemClaimLineNumber="1"/>
            <ClaimLine sourceSystemClaimLineNumber="2"/>
          </ClaimLines>
          <ClaimTrailer claimDetailLineCount="2"/>
        </ProfessionalClaim>
      </Claims>
      <IcnCount total="4"/>
    </ClaimRequest>
  </Body>
</Dcn>

このXMLファイルのヘッダータグの前にコメントタグを追加し、次の詳細を記入する必要があります。

<!-- Claims Paid_Start_Date="2018-04-02" Paid_End_Date="2018-04-17" Process_Start_Date="20180409" Process_End_Date="201804301" -->

ここでは、

  • Claim_Start_Date= ファイル内の ClaimStartDate の最小値。
  • Claim_End_Date=ファイル内の ClaimEndDate の最大値
  • Process_Start_Date=ファイルの最初の請求processedDateTime
  • Process_End_Date=ファイルの最後の請求ProcessedDateTime

これまで私がしたことは次のとおりです。

F_LINE=awk '/<professionalclaim/' test.xml | head -1

L_LINE=awk '/<professionalclaim/' test.xml | tail -1

この2行から必要な値を抽出してコメントタグに入力する必要があります。

ベストアンサー1

XMLパーサーを使用すると、必要なコンポーネントを一度に1つずつ抽出できます。あなたのファイルはx.xml

# Parse the XML file for the relevant entries
#
minClaimStartDate=$(xmlstarlet sel -t -v '//_:ProfessionalClaim/@claimStartDate' -n x.xml | sort -V | head -n1)
maxClaimEndDate=$(xmlstarlet sel -t -v '//_:ProfessionalClaim/@claimStartDate' -n x.xml | sort -V | tail -n1)
...

# Grab the XML declaration header
#
header=$(head -n1 x.xml)    # Ugh, I can't find a way to do this properly

それで、彫刻をこうして再び合わせることができます。

# Output composite
#
echo "$header"
echo "<!-- Claims Paid_Start_Date="$minClaimStartDate" Paid_End_Date="$maxClaimEndDate" ... -->"
xmlstarlet fo --omit-decl x.xml

おすすめ記事