検索
ホームページバックエンド開発XML/RSS チュートリアルXML データ解析の 3 つの方法を詳しく説明したサンプル コード

概要

データ対話形式としての Xml には、XML データの生成と解析が含まれます。ここでは、Xml 解析の 3 つの方法について説明します。

2. Dom の解析

1. パーサー ファクトリ オブジェクト (DocumentBuilderFactory オブジェクト) を作成します

3. Document オブジェクトを作成します

例えば、次のファイルを解析します

解析コードは次のとおりです

<?xml version="1.0" encoding="utf-8"?>
<students>

        <student id = "1001">
             <id>1</id>
             <name>杨威</name>
             <address>大连</address>
             <age>21</age>
        </student>

        <student id = "1002">
             <id>2</id>
             <name>劉海洋</name>
             <address>深圳</address>
             <age>23</age>
        </student>

        <student id = "1003">
             <id>3</id>
             <name>王小波</name>
             <address>廣州</address>
             <age>22</age>
        </student>

</students>

3. 要素 ele = doc.getDocumentElement(); 要素を取得すると、要素の値もノードになります。 element.getFirstChild().getNodeValue() メソッドの値によって取得されます。

3. XML 内の空白スペースもノードおよびテキスト タイプです。

4. SAX 解析

1. SAXParserFactory オブジェクトを作成します

2. DefaultHandler クラスを継承し、メソッドをオーバーライドする MyHandler を作成します。

4. sp.parse(new File("student.xml"), new MyHandler(list));

[code]package com.kuxiao.train.xml;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class XmlParseTest {

    public static void main(String[] args) throws Exception {

        //xml doc解析步骤
        //1、获取解析工厂对象
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        //2、构建解析器对象
        DocumentBuilder   db = dbf.newDocumentBuilder();
        //3、构建docment对象
        Document  doc = db.parse(new File("person.xml"));

        Element ele = doc.getDocumentElement();

        //实现解析逻辑
        NodeList list = doc.getElementsByTagName("student");

        for(int i = 0; i < list.getLength();i++)
        {
              Element element = (Element) list.item(i);
              String attrid = element.getAttribute("id");
              System.out.println("attrid = " + attrid);
              Element  element1 = (Element) element.getElementsByTagName("id").item(0);
              String id = element1.getFirstChild().getNodeValue();
              System.out.println(id);
              element1 = (Element) element.getElementsByTagName("name").item(0);
              String name = element1.getFirstChild().getNodeValue();
              System.out.println(name);
              element1 = (Element) element.getElementsByTagName("address").item(0);
              String address = element1.getFirstChild().getNodeValue();
              System.out.println(address);

        }       

    }

}

SAX はイベント モデルに基づいており、順次解析され、内部実装はオブザーバー モードであるという利点があります。メモリをほとんど消費しないこと、効率が高いこと、欠点はエンコードが比較的複雑なことです。

5. プル解析

1. この解析メソッドは JDK に付属していないため、サードパーティのライブラリをインポートする必要があります

3. XmlPullParser オブジェクトを作成します

4. setInput(is," utf-8”)

5. 対応するイベントタイプの処理 xpp.next() 次のイベントタイプ

[code]package com.kuxiao.train.xml.sax;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class TestSax {

    public static void main(String[] args) throws Exception {

        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        List<Student> list = new ArrayList<>();
        sp.parse(new File("student.xml"), new MyHandler(list));
        System.out.println(list);

    }
}

class MyHandler extends DefaultHandler {

    private Stack<String> stack = new Stack<>();
    private Student student;
    private List<Student> mList = null;

    public MyHandler(List<Student> list)
    {
          this.mList = list;
    }
    @Override
    public void startDocument() throws SAXException {

        System.out.println("解析文档开始了...");
    }

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
            if(qName.equals("学生"))
            {
                student = new Student();
                if(attributes.getLength() != 0)
                {
                     for(int i = 0; i < attributes.getLength();i++)
                     {
                            String id = attributes.getValue(i);
                            student.setId(Integer.parseInt(id));
                     }
                }
            }
            /*if(qName.equals("姓名"))
            {
                 stack.push(qName);
            }
            if(qName.equals("年龄"))
            {
                 stack.push(qName);
            }
            if(qName.equals("性别"))
            {
                 stack.push(qName);
            }*/
            stack.push(qName);
    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
             String qName = stack.peek();
            if(qName.equals("性别")){
                student.setGender(new String(ch,start,length));
            }
            if(qName.equals("姓名")){
                student.setName(new String(ch,start,length));
            }
            if(qName.equals("年龄")){
                student.setAge(new String(ch,start,length));
            }
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
            stack.pop();
            if(qName.equals("学生"))
            {
                mList.add(student);
                student = null;
            }
    }

    @Override
    public void endDocument() throws SAXException {
         System.out.println("解析文档结束了.....");
    }

}

以上がXML データ解析の 3 つの方法を詳しく説明したサンプル コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JSON、XML、およびデータ形式:RSSの比較JSON、XML、およびデータ形式:RSSの比較May 02, 2025 am 12:20 AM

JSON、XML、およびRSSの主な違いは構造と使用です。1。JSONは、簡潔な構造と解析が簡単な単純なデータ交換に適しています。 2。XMLは、複雑なデータ構造に適しており、厳密な構造ですが複雑な解析があります。 3。RSSはXMLに基づいており、コンテンツのリリースに使用され、標準化されていますが使用が制限されています。

XML/RSSフィードのトラブルシューティング:一般的な落とし穴と専門家のソリューションXML/RSSフィードのトラブルシューティング:一般的な落とし穴と専門家のソリューションMay 01, 2025 am 12:07 AM

XML/RSSフィードの処理には、解析と最適化が含まれ、一般的な問題にはフォーマットエラー、エンコードの問題、および欠落要素が含まれます。ソリューションには以下が含まれます。1。XML検証ツールを使用して、フォーマットエラーを確認します。 2。エンコーディングの一貫性を確保し、シャルドライブラリを使用してエンコードを検出します。 3.デフォルト値を使用するか、要素が欠落しているときに要素をスキップします。 4. LXMLやキャッシュの解析結果などの効率的なパーサーを使用して、パフォーマンスを最適化します。 5. XML注入攻撃を防ぐために、データの一貫性とセキュリティに注意してください。

RSSドキュメントの解読:フィードの読み取りと解釈RSSドキュメントの解読:フィードの読み取りと解釈Apr 30, 2025 am 12:02 AM

RSSドキュメントを解析する手順には、次のものがあります。1。XMLファイルを読み取り、2。DOMまたはSAXを使用してXML、3。Extract見出し、リンク、その他の情報、および4。プロセスデータ。 RSSドキュメントは、RSSリーダーまたはデータ処理ツールの構築に適した、更新されたコンテンツ、構造、および要素を公開するために使用されるXMLベースの形式です。

RSSおよびXML:Webシンジケーションの礎石RSSおよびXML:Webシンジケーションの礎石Apr 29, 2025 am 12:22 AM

RSSとXMLは、ネットワークコンテンツの分布とデータ交換のコアテクノロジーです。 RSSは頻繁に更新されるコンテンツを公開するために使用され、XMLはデータの保存と転送に使用されます。開発効率とパフォーマンスは、実際のプロジェクトでの使用例とベストプラクティスを通じて改善できます。

RSSフィード:XMLの役割と目的の調査RSSフィード:XMLの役割と目的の調査Apr 28, 2025 am 12:06 AM

RSSFeedにおけるXMLの役割は、データを構成し、標準化し、スケーラビリティを提供することです。 1.xmlはRSSFeedデータを構造化するため、解析と処理が簡単になります。 2.xmlは、RSSFeedの形式を定義する標準化された方法を提供します。 3.XMLスケーラビリティにより、RSSFeedは必要に応じて新しいタグと属性を追加できます。

スケーリングXML/RSS処理:パフォーマンス最適化手法スケーリングXML/RSS処理:パフォーマンス最適化手法Apr 27, 2025 am 12:28 AM

XMLおよびRSSデータを処理する場合、次の手順でパフォーマンスを最適化できます。1)LXMLなどの効率的なパーサーを使用して、解析速度を改善します。 2)SAXパーサーを使用して、メモリの使用量を削減します。 3)Xpath式を使用して、データ抽出効率を改善します。 4)処理速度を改善するために、マルチプロセスの並列処理を実装します。

RSSドキュメント形式:RSS 2.0以降の探索RSSドキュメント形式:RSS 2.0以降の探索Apr 26, 2025 am 12:22 AM

RSS2.0は、コンテンツパブリッシャーが構造化された方法でコンテンツを配布できるようにするオープン標準です。タイトル、リンク、説明、リリース日などの豊富なメタデータが含まれているため、サブスクライバーは迅速にコンテンツを参照してアクセスできます。 RSS2.0の利点は、そのシンプルさとスケーラビリティです。たとえば、カスタム要素を許可します。つまり、開発者は著者、カテゴリなどのニーズに基づいて追加情報を追加できます。

RSSの理解:XMLの視点RSSの理解:XMLの視点Apr 25, 2025 am 12:14 AM

RSSは、頻繁に更新されるコンテンツを公開するために使用されるXMLベースの形式です。 1。RSSFeedは、タイトル、リンク、説明などを含むXML構造を通じて情報を整理します。2。rssfeedの作成には、言語やリリース日などのメタデータを追加するXML構造での書き込みが必要です。 3.高度な使用法には、マルチメディアファイルと分類された情報を含めることができます。 4.デバッグ中にXML検証ツールを使用して、必要な要素が存在し、正しくエンコードされていることを確認します。 5. RSSFeedの最適化は、構造をシンプルに保つことで、ページング、キャッシュ、および保持することで実現できます。この知識を理解して適用することにより、コンテンツを効果的に管理および配布できます。

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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール