XML 파일을 구문 분석하는 여러 방법의 비교에 대한 자세한 소개
저는 업무를 하다 보면 XML 파일을 파싱해야 하는 경우가 많습니다. 며칠 전 인터뷰에서 좀 더 확장된 지식에 대한 질문을 받았는데, 깜짝 놀랐습니다. 만족스러운 답변이 없으면 녹음해서 공부하겠습니다.
기능: DOM은 XML 파일을 메모리에 한 번에 로드해야 합니다.
SAX는 일회성 로드가 필요하지 않으며 모든 데이터가 처리될 때까지 기다리지 않고 즉시 분석을 시작할 수 있습니다.
JDOM은 Java의 컬렉션 객체 를 광범위하게 사용하여 Java 프로그래머의 작업 효율성을 크게 향상시킵니다.
현재 DOM4J가 가장 많이 사용되고 있으며, 우리 프로젝트에서도 파싱을 위해 DOM4j를 사용하고 있습니다.
1) DOM(JAXP Crimson 파서)
DOM은 플랫폼 및 언어 독립적인 방식으로 XML 문서를 표현하기 위한 공식 W3C 표준입니다. DOM은 계층 구조로 구성된 노드 또는 정보 조각의 모음입니다. 이 계층 구조를 통해 개발자는 트리에서 특정 정보를 검색할 수 있습니다. 이 구조를 분석하려면 일반적으로 작업을 완료하기 전에 전체 문서를 로드하고 계층 구조를 구성해야 합니다. DOM은 정보 계층 구조를 기반으로 하기 때문에 트리 기반 또는 객체 기반으로 간주됩니다. DOM과 일반적으로 트리 기반 처리에는 몇 가지 장점이 있습니다. 첫째, 트리는 메모리에 지속되기 때문에 애플리케이션이 데이터와 구조를 변경할 수 있도록 수정할 수 있습니다. 또한 SAX처럼 일회성 프로세스가 아닌 언제든지 트리 위아래로 탐색할 수 있습니다. DOM은 사용하기도 훨씬 간단합니다.
2) SAX
SAX 처리의 장점은 스트리밍 미디어의 장점과 매우 유사합니다. 모든 데이터가 처리될 때까지 기다리지 않고 즉시 분석을 시작할 수 있습니다. 또한 애플리케이션은 데이터를 읽으면서 확인만 하기 때문에 데이터를 메모리에 저장할 필요가 없습니다. 이는 대용량 문서의 경우 큰 장점입니다. 실제로 애플리케이션은 전체 문서를 구문 분석할 필요조차 없으며 특정 조건이 충족되면 구문 분석을 중지할 수 있습니다. 일반적으로 SAX는 대체품인 DOM보다 훨씬 빠릅니다.
DOM 또는 SAX를 선택하시겠습니까? XML 문서를 처리하기 위해 자신의 코드를 작성해야 하는 개발자의 경우 DOM 또는 SAX 구문 분석 모델을 선택하는 것은 매우 중요한 디자인 결정입니다. DOM은 트리 구조를 사용하여 XML 문서에 액세스하는 반면 SAX는 이벤트 모델을 사용합니다. DOM 파서는 XML 문서를 해당 콘텐츠가 포함된 트리로 변환하고 트리를 순회할 수 있습니다. DOM을 사용하여 모델을 구문 분석하면
프로그래밍
이 쉽다는 장점이 있습니다. 개발자는 트리 작성 지침을 호출한 다음 탐색 API를 사용하여 필요한 항목에 액세스하기만 하면 됩니다. 작업을 완료하기 위한 트리 노드입니다. 트리의 요소는 쉽게 추가하고 수정할 수 있습니다. 그러나 DOM 파서를 사용할 때는 전체 XML 문서를 처리해야 하므로 성능 및 메모리 요구 사항이 상대적으로 높으며, 특히 대용량 XML 파일을 접할 때 더욱 그렇습니다. 순회 기능으로 인해 DOM 파서는 XML 문서를 자주 변경해야 하는 서비스에서 자주 사용됩니다. SAX 파서는 XML 문서를 구문 분석할 때 일련의 이벤트를 트리거할 수 있으며 콜백 메소드를 활성화하고 태그가 발견되었습니다. SAX는 개발자가 처리할 태그를 결정할 수 있도록 하기 때문에 일반적으로 메모리 요구 사항이 낮습니다. 특히 개발자가 문서에 포함된 데이터의 일부만 처리하면 되는 경우 SAX의 확장성이 더 잘 반영됩니다. 그러나 SAX 파서를 사용할 때 코딩이 더 어렵고, 동일한 문서에 있는 여러 다른 데이터에 동시에 액세스하기가 어렵습니다.
3) JDOM www.jdom.org
JDOM은 XML과의 상호 작용을 단순화하고 DOM을 사용하는 것보다 빠른 Java 전용 문서 모델로 설계되었습니다. JDOM은 최초의 Java 관련 모델인 이래로 많이 홍보되고 홍보되었습니다. "Java 사양 요청 JSR-102"를 통해 "Java 표준 확장"으로 최종 사용이 고려되고 있습니다. JDOM 개발은 2000년대 초반부터 시작되었습니다.
JDOM과 DOM에는 두 가지 주요 차이점이 있습니다. 첫째, JDOM은
인터페이스
가 아닌 구체적인 클래스만 사용합니다. 이는 어떤 면에서는 API를 단순화하지만 유연성도 제한합니다. 둘째, API는 Collections 클래스를 광범위하게 사용하므로 이러한 클래스에 이미 익숙한 Java 개발자의 사용을 단순화합니다. JDOM 문서에는 그 목적이 "20%(또는 그 이하)의 노력을 사용하여 80%(또는 그 이상) Java/XML 문제를 해결하는 것"이라고 명시되어 있습니다(학습 곡선을 기준으로 20% 가정). JDOM은 확실히 대부분의 Java/XML 애플리케이션에 유용하며 대부분의 개발자는 API가 DOM보다 훨씬 이해하기 쉽다고 생각합니다. JDOM에는 또한 사용자가 XML에서 의미가 없는 작업을 수행하지 못하도록 프로그램 동작에 대한 상당히 광범위한 검사가 포함되어 있습니다. 그러나 기본 이상의 작업을 수행하려면 XML을 충분히 이해해야 합니다(또는 경우에 따라 오류도 이해해야 함). 이는 DOM이나 JDOM 인터페이스를 배우는 것보다 더 의미 있는 작업일 수 있습니다.
JDOM 자체에는 파서가 포함되어 있지 않습니다. 일반적으로 SAX2 파서를 사용하여 입력 XML 문서를 구문 분석하고 검증합니다(이전에 구성된 DOM 표현을 입력으로 사용할 수도 있음). 여기에는 JDOM 표현을 SAX2 이벤트 스트림, DOM 모델 또는 XML 텍스트 문서로 출력하는 변환기가 포함되어 있습니다. JDOM은 Apache 라이센스의 변형에 따라 릴리스된 오픈 소스입니다.
4) DOM4J dom4j.sourceforge.net
DOM4J는 완전히 독립적인 개발 결과를 나타내지만 처음에는 JDOM의 지능형 포크였습니다. 통합 XPath 지원, XML 스키마 지원, 대규모 문서 또는 스트리밍 문서에 대한 이벤트 기반 처리를 포함하여 기본 XML 문서 표현 이상의 많은 기능을 통합합니다. 또한 DOM4J API 및 표준 DOM 인터페이스를 통해 병렬 액세스 기능을 갖춘 문서 표현을 구축하는 옵션도 제공합니다. 2000년 하반기부터 개발이 진행 중이다.
이러한 모든 기능을 지원하기 위해 DOM4J는 인터페이스와 추상 기본 클래스 메소드를 사용합니다. DOM4J는 API에서 Collections 클래스를 많이 사용하지만 많은 경우 더 나은 성능이나 보다 직접적인 코딩 접근 방식을 허용하는 대안도 제공합니다. 직접적인 이점은 DOM4J가 더 복잡한 API의 비용을 지불하지만 JDOM보다 훨씬 더 큰 유연성을 제공한다는 것입니다.
유연성, XPath 통합 및 대용량 문서 처리 목표를 추가하는 동시에 DOM4J의 목표는 JDOM과 동일합니다. 즉, Java 개발자를 위한 사용 용이성과 직관적인 작업입니다. 또한 기본적으로 모든 Java/XML 문제를 처리한다는 목표를 달성하여 JDOM보다 더 완벽한 솔루션을 목표로 합니다. 해당 목표를 달성하는 동안 잘못된 애플리케이션 동작을 방지하는 데 JDOM보다 덜 중점을 둡니다.
DOM4J는 뛰어난 성능, 강력한 기능 및 사용 편의성을 갖춘 매우 우수한 Java XML API이기도 합니다. 요즘에는 점점 더 많은 Java 소프트웨어가 DOM4J를 사용하여 XML을 읽고 쓰는 것을 볼 수 있습니다. 특히 Sun의 JAXM도 DOM4J를 사용하고 있다는 점을 언급할 가치가 있습니다.
2... 비교
1) DOM4J는 성능이 가장 좋습니다. Sun의 JAXM도 DOM4J를 사용하고 있습니다. 현재 많은 오픈 소스 프로젝트에서는 DOM4J를 광범위하게 사용합니다. 예를 들어 유명한 Hibernate도 XML 구성 파일을 읽는 데 DOM4J를 사용합니다. 이식성을 고려하지 않는다면 DOM4J를 사용하세요.
2) 성능 테스트 중 JDOM과 DOM의 성능이 좋지 않았고, 10M 문서 테스트 시 메모리 오버플로가 발생했습니다. 작은 문서의 경우 DOM과 JDOM을 사용하는 것도 고려해 볼 만하다. JDOM 개발자들은 공식 출시 전에 성능 문제에 집중할 것이라고 밝혔지만, 성능 측면에서는 별로 추천할 만한 것이 없다. 게다가 DOM은 여전히 매우 좋은 선택입니다. DOM 구현은 많은 프로그래밍 언어에서 널리 사용됩니다. 이는 또한 많은 다른 XML 관련 표준의 기초이기도 하며, W3C에서 공식적으로 권장하기 때문에(비표준 기반 Java 모델과 반대) 특정 유형의 프로젝트에도 필요할 수 있습니다. (예: JavaScript에서는 DOM을 사용합니다).
3) SAX의 성능은 특정 구문 분석 방법(이벤트 구동 )에 따라 더 잘 수행됩니다. SAX는 들어오는 XML 스트림을 감지하지만 이를 메모리에 로드하지 않습니다. 물론 XML 스트림을 읽을 때 일부 문서는 일시적으로 메모리에 숨겨집니다.
3. 4가지 xml 작업 방법의 기본 사용법 방법
xml 파일:
<?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>XX号</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>XX组</ADDR> </VALUE> </RESULT>
1) DOM
import java.io.*; import java.util.*; import org.w3c.dom.*; import javax.xml.parsers.*; public class MyXMLReader{ public static void main(String arge[]){ long lasting =System.currentTimeMillis(); try{ File f=new File("data_10k.xml"); DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document doc = builder.parse(f); NodeList nl = doc.getElementsByTagName("VALUE"); for (int i=0;i<nl.getLength();i++){ System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue()); System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue()); } }catch(Exception e){ e.printStackTrace(); }
2 ) SAX
import org.xml.sax.*; import org.xml.sax.helpers.*; import javax.xml.parsers.*; public class MyXMLReader extends DefaultHandler { java.util.Stack tags = new java.util.Stack(); public MyXMLReader() { super(); } public static void main(String args[]) { long lasting = System.currentTimeMillis(); try { SAXParserFactory sf = SAXParserFactory.newInstance(); SAXParser sp = sf.newSAXParser(); MyXMLReader reader = new MyXMLReader(); sp.parse(new InputSource("data_10k.xml"), reader); } catch (Exception e) { e.printStackTrace(); } System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");} public void characters(char ch[], int start, int length) throws SAXException { String tag = (String) tags.peek(); if (tag.equals("NO")) { System.out.print("车牌号码:" + new String(ch, start, length)); } if (tag.equals("ADDR")) { System.out.println("地址:" + new String(ch, start, length)); } } public void startElement(String uri,String localName,String qName,Attributes attrs) { tags.push(qName);} }
3) JDOM
import java.io.*; import java.util.*; import org.jdom.*; import org.jdom.input.*; public class MyXMLReader { public static void main(String arge[]) { long lasting = System.currentTimeMillis(); try { SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(new File("data_10k.xml")); Element foo = doc.getRootElement(); List allChildren = foo.getChildren(); for(int i=0;i<allChildren.size();i++) { System.out.print("车牌号码:" + ((Element)allChildren.get(i)).getChild("NO").getText()); System.out.println("车主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText()); } } catch (Exception e) { e.printStackTrace(); } }
4) DOM4J
import java.io.*; import java.util.*; import org.dom4j.*; import org.dom4j.io.*; public class MyXMLReader { public static void main(String arge[]) { long lasting = System.currentTimeMillis(); try { File f = new File("data_10k.xml"); SAXReader reader = new SAXReader(); Document doc = reader.read(f); Element root = doc.getRootElement(); Element foo; for (Iterator i = root.elementIterator("VALUE"); i.hasNext() { foo = (Element) i.next(); System.out.print("车牌号码:" + foo.elementText("NO")); System.out.println("车主地址:" + foo.elementText("ADDR")); } } catch (Exception e) { e.printStackTrace(); } )
위 내용은 XML 파일을 구문 분석하는 여러 방법의 비교에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











오늘날의 스마트폰 시장에서 소비자는 점점 더 많은 선택에 직면해 있습니다. 지속적인 기술 개발로 인해 휴대폰 제조업체는 점점 더 많은 모델과 스타일을 출시했으며 그중 Vivox100과 Vivox100Pro는 의심할 여지 없이 많은 관심을 끄는 두 가지 제품입니다. 두 휴대폰 모두 잘 알려진 브랜드인 Vivox에서 생산되지만 기능, 성능, 가격 면에서 일정한 차이가 있습니다. 그렇다면 이 두 휴대폰을 마주할 때 어느 휴대폰을 구매하는 것이 더 가치가 있을까요? Vivox100과 Vivox100Pro의 외관 디자인에는 분명한 차이가 있습니다.

현재 통화계에서 선호하는 잠재적 코인으로는 SOL 코인과 BCH 코인이 있습니다. SOL은 솔라나 블록체인 플랫폼의 기본 토큰이며 비트코인의 포크 통화인 BitcoinCash 프로젝트의 토큰입니다. 기술적 특성, 적용 시나리오, 개발 방향이 다르기 때문에 투자자들이 둘 중 하나를 선택하기가 어렵습니다. SOL 통화와 BCH 중 어느 것이 더 잠재력이 있는지 분석하고 싶습니다. 다시 투자하세요. 그러나 통화를 비교하려면 시장, 개발 전망, 프로젝트 강도 등에 따른 종합적인 분석이 필요합니다. 다음에는 에디터가 자세히 알려드리겠습니다. SOL 코인과 BCH 중 어느 것이 더 잠재력이 있나요? 이에 비해 SOL 통화는 더 많은 잠재력을 가지고 있습니다. SOL 통화 또는 BCH 중 어느 것이 더 많은 잠재력을 가지고 있는지 결정하는 것은 많은 요인에 따라 달라지기 때문에 복잡한 문제입니다.

Windows 10 vs. Windows 11 성능 비교: 어느 것이 더 낫나요? 지속적인 기술 개발과 발전으로 운영 체제는 지속적으로 업데이트되고 업그레이드됩니다. 세계 최대 운영 체제 개발자 중 하나인 Microsoft의 Windows 운영 체제 시리즈는 항상 사용자로부터 많은 관심을 받아 왔습니다. 2021년에 Microsoft는 Windows 11 운영 체제를 출시하여 광범위한 논의와 관심을 불러일으켰습니다. 그렇다면 Windows 10과 Windows 11의 성능 차이는 무엇입니까?

TV 박스는 인터넷과 TV를 연결하는 중요한 장치로서 최근 몇 년 동안 점점 더 대중화되고 있습니다. 스마트 TV의 인기로 인해 소비자들은 Tmall, Xiaomi, ZTE 및 Huawei와 같은 TV 박스 브랜드를 점점 더 선호하고 있습니다. 독자들이 자신에게 가장 적합한 TV 상자를 선택할 수 있도록 돕기 위해 이 기사에서는 이 네 가지 TV 상자의 기능과 장점을 심층적으로 비교할 것입니다. 1. Huawei TV Box: 스마트 시청각 경험이 뛰어나고 원활한 시청 경험을 제공할 수 있습니다. Huawei TV Box는 강력한 프로세서와 고화질 화질을 갖추고 있습니다. 온라인 비디오, 내장된 풍부한 응용 프로그램, 음악 및 게임 등 다양한 오디오 및 비디오 형식을 지원합니다. Huawei TV box에는 음성 제어 기능도 있어 작동이 더욱 편리해졌습니다. 원클릭 캐스팅으로 휴대폰에 있는 콘텐츠를 TV 화면으로 쉽게 전송할 수 있습니다.

Vivox100과 Vivox100Pro의 비교 평가: 어느 것을 더 선호하시나요? 스마트폰이 더욱 대중화되고 강력해짐에 따라 휴대폰 액세서리에 대한 사람들의 수요도 늘어나고 있습니다. 휴대폰 액세서리의 필수 부품인 헤드폰은 사람들의 일상 생활과 업무에서 중요한 역할을 합니다. 많은 헤드폰 브랜드 중에서 가장 주목을 받고 있는 제품은 Vivox100과 Vivox100Pro 두 가지입니다. 오늘은 이 두 헤드폰에 대한 자세한 비교 평가를 실시하여 장점과 단점을 알아보겠습니다.

제목: Go 언어와 다른 프로그래밍 언어의 성능 비교, 장단점 컴퓨터 기술이 지속적으로 발전함에 따라 프로그래밍 언어의 선택이 점점 더 중요해지고 있으며, 그 중 성능이 중요한 고려 사항입니다. 이 기사에서는 Go 언어를 예로 들어 Go 언어의 성능을 다른 일반적인 프로그래밍 언어와 비교하고 각각의 장점과 단점을 분석합니다. 1. Go 언어 개요 Go 언어는 Google에서 개발한 오픈 소스 프로그래밍 언어로, 빠른 컴파일, 효율적인 동시성, 간결성 및 쉬운 가독성이라는 특징을 가지고 있으며 네트워크 서비스, 분산 시스템, 클라우드 컴퓨팅 및 개발에 적합합니다. 다른 분야. 가다

일반적인 XML 파일 열기 방법: 1. 텍스트 편집기, 3. XML 편집기, 5. Microsoft Excel 등

XML 파일은 데이터를 설명하고 전송하는 데 사용되는 마크업 언어입니다. 확장성, 가독성 및 유연성으로 잘 알려져 있으며 웹 애플리케이션, 데이터 교환 및 웹 서비스에서 널리 사용됩니다. XML의 형식과 구조는 데이터의 구성과 해석을 간단하고 명확하게 만들어 데이터 교환 및 공유의 효율성을 향상시킵니다.
