XML에서 태그를 제거하는 방법

XML에서 태그를 제거하는 방법

다음 XML 파일이 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<deviceID>IO238470374109730497</devicdeID>
<KeyValuePairs>
    <KeyValuePair>
      <BASE-URL>2</BASE-URL>
      <Key>2</Key>
      <Value>2</Value>
    </KeyValuePair>
    <KeyValuePair>
     <BASE-URL>3</BASE-URL>
     <Key>3</Key>
     <Value>3</Value>
   </KeyValuePair>
</KeyValuePairs>

이 부분만 제거하고 싶습니다.

<KeyValuePair>
    <BASE-URL>3</BASE-URL>
    <Key>3</Key>
    <Value>3</Value>
</KeyValuePair>

내가 달성하고 싶은 것은 내부 콘텐츠를 제거하고 <KeyValuePair>이러한 특정 <BASE-URL>, <Key><Value>. 튜플은 <KeyValuePair>항상 고유하며 반복되지 않지만 하나 이상이 될 수 있습니다.

Bash를 사용하여 이 작업을 어떻게 수행할 수 있나요?

답변1

귀하의 예는 유효한 XML 파일이 아닙니다. <root/>문서 주위에 요소를 추가하고 닫는 태그의 오타를 수정하여 </deviceID>약간 변경했습니다 .

<?xml version="1.0" encoding="utf-8"?>
<root>
    <deviceID>IO238470374109730497</deviceID>
    <KeyValuePairs>
        <KeyValuePair>
            <BASE-URL>2</BASE-URL>
            <Key>2</Key>
            <Value>2</Value>
        </KeyValuePair>
        <KeyValuePair>
            <BASE-URL>3</BASE-URL>
            <Key>3</Key>
            <Value>3</Value>
        </KeyValuePair>
    </KeyValuePairs>
</root>

이제 XML 편집 도구를 사용하여 XML을 편집할 수 있습니다. 이 XPath 표현식은 텍스트 값이 포함된 xmlstarletXML 요소 (및 해당 내용) 가 삭제됨을 나타냅니다 <KeyValuePair/>.<BASE-URL/>3

xmlstarlet ed -d '//KeyValuePair[BASE-URL/text()="3"]' /tmp/500185.xml

출력은 다음과 같습니다

<?xml version="1.0" encoding="utf-8"?>
<root>
  <deviceID>IO238470374109730497</deviceID>
  <KeyValuePairs>
    <KeyValuePair>
      <BASE-URL>2</BASE-URL>
      <Key>2</Key>
      <Value>2</Value>
    </KeyValuePair>
  </KeyValuePairs>
</root>

관련 정보