아래와 같이 입력 XML 파일이 있습니다.
입력 파일
<ReconSummary>
<entryName>Total Deep</entryName>
<Code>777</Code>
<License>L</License>
<Tran>H20</Tran>
<job>1234</job>
</ReconSummary>
<ReconSummary>
<entryName>Total Saurav</entryName>
<Code>666</Code>
<License>L</License>
<Tran>H20</Tran>
<job>1234</job>
</ReconSummary>
<ReconSummary>
<entryName>Total Ankur</entryName>
<Code>555</Code>
<License>L</License>
<Tran>H20</Tran>
<job>1234</job>
</ReconSummary>
"Total Deep" 패턴을 찾으면 출력 파일이 다음과 같이 보이도록 해당 태그에 주석을 달고 싶습니다.
산출
<!--<ReconSummary>
<entryName>Total Deep</entryName>
<Code>777</Code>
<License>L</License>
<Tran>H20</Tran>
<job>1234</job>
</ReconSummary>-->
<ReconSummary>
<entryName>Total Saurav</entryName>
<Code>666</Code>
<License>L</License>
<Tran>H20</Tran>
<job>1234</job>
</ReconSummary>
<ReconSummary>
<entryName>Total Ankur</entryName>
<Code>555</Code>
<License>L</License>
<Tran>H20</Tran>
<job>1234</job>
</ReconSummary>
저는 쉘 스크립팅을 처음 접하기 때문에 쉘 스크립팅을 사용하여 이를 적용하는 방법을 이해하도록 도와줄 수 있는 사람이 있습니까?
답변1
xmlstarlet
다음과 같은 XML 구문 분석 도구를 사용하는 것은 쉽습니다 .삭제특정 XPATH 패턴과 일치하는 XML 비트입니다.
이 경우 ReconSummary
하위 노드 값이 다음과 같은 모든 노드를 삭제하려면 다음을 수행하십시오.entryName
Total Deep
xmlstarlet ed -d '//ReconSummary[entryName = "Total Deep"]' file.xml >newfile.xml
...파일이 올바른 형식의 XML 파일이라고 가정합니다(귀하의 예에는 단일 최상위 노드가 없기 때문에 그렇지 않습니다).
그러나댓글 달기약간의 XML은 약간 까다롭고 xmlstarlet
직접적으로 수행할 수 없습니다.
대신 XSL 변환을 적용하여 XML을 다시 작성할 수 있습니다.
사용답변비슷한 질문인 XSL 변환을 작성했습니다.
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/|node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//ReconSummary[entryName = 'Total Deep']">
<xsl:text disable-output-escaping="yes"><!-- </xsl:text>
<xsl:copy-of select="."/>
<xsl:text disable-output-escaping="yes"> --></xsl:text>
</xsl:template>
</xsl:transform>
XML 주석 태그는 하위 노드에 값이 있는 각 노드 주위에 삽입됩니다 <!--
.-->
ReconSummary
entryName
Total Deep
다음 방법 중 하나를 사용하여 이 XSL 변환을 XML 파일에 적용할 수 있습니다.
xmlstarlet tr transform.xsl file.xml >newfile.xml
또는
xsltproc transform.xsl file.xml >newfile.xml
파일이 있는 위치 file.xml
와 변환이 transform.xsl
.