긴 이야기 짧게

긴 이야기 짧게

xml이 태그가 여러 번 포함된 파일이 있습니다 .</w:rPr>

이것이 사용되는 방법입니다

  <w:rPr>
      TO REMOVE
  </w:rPr>

그러나 태그 자체 간의 내용이 다른 경우가 있습니다. sed 등을 사용하여 <w:rPr>및 사이의 모든 항목을 제거한 </w:rPr>다음 두 태그도 제거 하는 방법이 있습니까 ?

관련 네임스페이스

xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"

및 파일 자체(형식이 지정된 유효한 XML)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:lvl w:ilvl="0">
      <w:rPr>
          TO REMOVE
      </w:rPr>
      <w:rPx>
        <w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:hint="default"/>
      </w:rPx>
    </w:lvl>
</root>

답변1

긴 이야기 짧게

제발, 절대 사용하지 마세요이번 임무를 위해!

또는 를 sed사용할 때마다 새끼 고양이를 죽입니다.htmlxml

이건 과제야

(적절한 XML 파서)와 그의 친구들, 이와 같이:

xmlstarlet ed \
           -L \
           -N w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" \
           -d '//w:rPr' file.xml

몇 가지 설명:

  • -L파일 편집비행 중좋다sed -i
  • -N설정XML 네임스페이스, 필요하다면
  • -dxpath표현식과 일치하는 노드 삭제

확인하다xmlstarlet edit --help

사용basex

순수 XQuery 솔루션:

$ cat XQuery
declare namespace w = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";    
copy $input := doc("/dev/stdin")
modify delete node $input//w:rPr
return $input

$ basex XQuery < file.xml

사용 XQueryxidel:

그리고제한된 XQuery 기능.

xidel --xml --xquery '
    declare namespace w = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
    x:replace-nodes(//w:rPr, ())
' file.xml 

이론:

컴파일 이론에 따르면 XML/HTML은 다음을 기반으로 하는 정규식을 사용하여 구문 분석할 수 없습니다.유한 상태 머신. XML/HTML의 계층적 구조로 인해 다음을 사용해야 합니다.푸시다운 오토마톤조작하고왼손잡이 수용체도구와 유사한 구문 사용아크릴.

realLife©®™ 일상 도구:

다음 중 하나를 사용할 수 있습니다.

  • xmllintlibxml2xpath1은 일반적으로 기본적으로 설치됩니다.
  • xmlstarlet편집, 선택, 변환 가능...기본적으로 설치되지 않음, XPath1
  • Perl 모듈 XML::XPath, XPath1을 통해 설치됨
  • 베이직Xbasex패키지 , 전체 XQuery 3.1 은 기본적으로 설치되지 않습니다.
  • 히델XPath3, 일부 XQuery 3(업데이트 없음)
  • 색슨 린트내 프로젝트, @Michael Kay의 Saxon-HE Java 라이브러리 XPath3에 대한 래퍼

아니면 고급 언어와 적절한 라이브러리를 사용할 수도 있습니다.

~의lxml( from lxml import etree)

~의XML::LibXML,XML::XPath,XML::Twig::XPath,HTML::TreeBuilder::XPath

,이 예를 확인하세요

DOMXpath,이 예를 확인하세요


확인하다:HTML 태그와 함께 정규식 사용

여기에 이미지 설명을 입력하세요.

관련 정보