찾다
백엔드 개발XML/RSS 튜토리얼XML에서 SAX를 사용하여 컨텐츠를 수정하는 방법

SAX로 XML을 수정하는 것은 다음 단계와 관련된 이벤트 기반 전략입니다. XML 컨텐츠를 읽고 요소 이벤트를 듣습니다. 요소를 수정 해야하는지 확인하십시오. 텍스트 이벤트에서 수정하십시오. 최종 요소 이벤트에 수정 된 컨텐츠를 작성하십시오.

XML에서 SAX를 사용하여 컨텐츠를 수정하는 방법

색소폰으로 XML 수정 : 추가, 삭제, 수정 및 검색에 대한 자세한 설명

대형 XML 파일을 효율적으로 수정하는 방법에 대해 생각해 본 적이 있습니까? 전체 파일을 DOM으로 메모리에 직접로드 하시겠습니까? 거대한 파일의 경우 이것은 단순히 재앙입니다! 현재 Sax는 훌륭한 데뷔를했습니다. 이벤트 기반 XML 파서이며 라인별로 읽고 작은 메모리 풋 프린트가 있으며 큰 XML을 처리하는 데 매우 적합합니다. 그러나 DOM과 같은 노드를 직접 작동하지 않으며 XML을 수정하려면 약간의 기술이 필요합니다. SAX로 XML 컨텐츠를 우아하게 수정하는 방법을 살펴 보겠습니다.

XML 및 색소폰 : 가벼운 조합

Sax 자체가 XML을 수정하는 기능을 직접 제공하지 않는다는 것을 먼저 분명히합시다. 이 이벤트를 처리하고 새로운 XML 컨텐츠를 생성하기 위해 자신의 논리를 작성 해야하는 것은 (예 : 시작 태그, 엔드 태그, 텍스트 콘텐츠)를 하나씩 알리는 독자입니다. 소설을 읽는 것과 같습니다. 색소폰은 페이지별로 당신에게 그것을 읽을 책임이 있습니다. 스토리를 직접 이해하고 필요에 따라 이야기를 다시 작성해야합니다.

이를 이해 한 후 SAX를 사용하여 XML을 수정하는 것이 기본적으로 "읽기 쓰기"프로세스라는 것을 이해할 수 있습니다. 원래 XML 읽기, 처리 이벤트 및 수정 된 XML 생성.

핵심 : 이벤트 중심 수정 전략

색소폰의 핵심은 이벤트 처리입니다. 각 XML 요소의 시작과 끝은 해당 이벤트를 트리거합니다. 우리의 수정 전략은 이러한 이벤트에 대한 응답을 기반으로합니다.

간단한 XML 파일을 수정하려고한다고 가정합니다.

 <code class="xml"><bookstore> <book> <title>The Lord of the Rings</title> <price>29.99</price> </book> <book> <title>The Hitchhiker's Guide to the Galaxy</title> <price>12.99</price> </book> </bookstore></code>

"반지의 제왕"의 가격을 수정하려면 메모리에서 XML 트리를 직접 수정할 수는 없지만 대신 필요합니다.

  1. 읽기 : Sax Parser를 사용하여 XML을 읽고 startElement , characters , endElement 및 기타 이벤트를 듣습니다.
  2. 판단 : startElement 이벤트에서 현재 요소가 <book></book> 인지, <title></title> 이 "반지의 제왕"인지 여부를 결정하십시오.
  3. 수정 : characters 이벤트에서 현재 요소가 <price></price> 인 경우 텍스트 내용 (가격) 읽기를 수정하십시오.
  4. 쓰기 : endElement 이벤트에서 수정 된 컨텐츠를 새 XML 파일에 작성하십시오.

파이썬 코드 예 : 가격 수정

다음 Python 코드는 xml.sax 라이브러리를 사용하여 XML 파일에서 가격을 수정하는 방법을 보여줍니다.

 <code class="python">import xml.sax import xml.sax.saxutils class BookHandler(xml.sax.ContentHandler): def __init__(self, output_file): self.output_file = output_file self.in_book = False self.in_price = False self.current_title = "" self.current_price = "" def startElement(self, name, attrs): if name == "book": self.in_book = True elif name == "price" and self.in_book: self.in_price = True def characters(self, content): if self.in_price: self.current_price = content.strip() def endElement(self, name): if name == "book": self.in_book = False self.output_file.write(f'<book><title>{self.current_title}</title>
<price>39.99</price></book>\n') #修改价格并写入self.current_title = "" self.current_price = "" elif name == "price": self.in_price = False elif name == "title": self.current_title = self.current_price #此处是错误的,应该直接读取title def modify_xml(input_file, output_file): parser = xml.sax.make_parser() handler = BookHandler(output_file) parser.setContentHandler(handler) parser.parse(input_file) # 使用示例input_file = "bookstore.xml" output_file = open("bookstore_modified.xml", "w") output_file.write('<bookstore>\n') #添加bookstore标签modify_xml(input_file, output_file) output_file.write('</bookstore>') #添加bookstore结束标签output_file.close()</code>

잠재적 인 문제 및 최적화

  • 오류 처리 : 코드에 오류 처리 메커니즘이 부족합니다. 실제 애플리케이션에서는 존재하지 않는 파일을 처리하거나 오류를 구문 분석해야합니다.
  • 큰 파일 처리 : 매우 큰 XML 파일의 경우 SAX를 사용하더라도 메모리 문제가 발생할 수 있습니다. 청크 처리를 고려하거나보다 효율적인 구문 분석 라이브러리를 사용할 수 있습니다.
  • 복잡한 구조 : 복잡한 XML 구조의 경우보다 복잡한 이벤트 처리 로직이 필요합니다. 상태를 관리하려면 상태 기계 또는 기타 설계 패턴이 필요할 수 있습니다.

요컨대, 색소폰으로 XML을 수정하는 것은 쉽지 않습니다. SAX의 작업 원리와 실제 조건에 따라 적절한 이벤트 처리 논리를 작성하는 것에 대한 깊은 이해가 필요합니다. 그러나 큰 XML 파일을 처리 할 때 효율성 이점을 무시할 수 없습니다. 색소폰에 능숙함에 따라 XML의 힘을 진정으로 제어 할 수 있습니다.

위 내용은 XML에서 SAX를 사용하여 컨텐츠를 수정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
详细讲解Python之Seaborn(数据可视化)详细讲解Python之Seaborn(数据可视化)Apr 21, 2022 pm 06:08 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

详细了解Python进程池与进程锁详细了解Python进程池与进程锁May 10, 2022 pm 06:11 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

Python自动化实践之筛选简历Python自动化实践之筛选简历Jun 07, 2022 pm 06:59 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

归纳总结Python标准库归纳总结Python标准库May 03, 2022 am 09:00 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于标准库总结的相关问题,下面一起来看一下,希望对大家有帮助。

Python数据类型详解之字符串、数字Python数据类型详解之字符串、数字Apr 27, 2022 pm 07:27 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

分享10款高效的VSCode插件,总有一款能够惊艳到你!!分享10款高效的VSCode插件,总有一款能够惊艳到你!!Mar 09, 2021 am 10:15 AM

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

详细介绍python的numpy模块详细介绍python的numpy模块May 19, 2022 am 11:43 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

python中文是什么意思python中文是什么意思Jun 24, 2019 pm 02:22 PM

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기