ホームページ バックエンド開発 XML/RSS チュートリアル XML 形式のファイルと文字列を生成および解析するための Java サンプル コード

XML 形式のファイルと文字列を生成および解析するための Java サンプル コード

Jan 11, 2017 pm 12:39 PM

1. 基本知識:
一般に、Java が XML を解析するには、DOM、SAX、JDOM、および DOM4J の 4 つの方法があります。

2. 使い方の紹介
1)、DOMの紹介
(1)

XML文書全体をメモリに読み込み、各ノードを比較するためのDOMツリーを構築するW3Cが提供するインターフェース(ノード ) を操作します。利点は、ドキュメント全体が常にメモリ内にあり、いつでもどのノードにもアクセスできることです。また、ツリー トラバーサルは比較的馴染みのある操作でもあるため、メモリを消費し、すべてのドキュメントがメモリに読み込まれるまで待たなければならないことが欠点です。加工前。

(2) サンプルコード:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
    <TelePhone>
        <type name="nokia">
            <price>599</price>
            <operator>CMCC</operator>
        </type>
        <type name="xiaomi">
            <price>699</price>
            <operator>ChinaNet</operator>
        </type>
    </TelePhone>
</root>
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class XMLHandler {
    public XMLHandler(){
        
    }
    
    public String createXML(){
        String xmlStr = null;
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.newDocument();
            document.setXmlVersion("1.0");
            
            Element root = document.createElement("root");
            document.appendChild(root);
            
            Element telephone = document.createElement("TelePhone");
            
            Element nokia = document.createElement("type");
            nokia.setAttribute("name", "nokia");
            
            Element priceNokia = document.createElement("price");
            priceNokia.setTextContent("599");
            nokia.appendChild(priceNokia);
            
            Element operatorNokia = document.createElement("operator");
            operatorNokia.setTextContent("CMCC");
            nokia.appendChild(operatorNokia);
            
            telephone.appendChild(nokia);
            
            Element xiaomi = document.createElement("type");
            xiaomi.setAttribute("name", "xiaomi");
            
            Element priceXiaoMi = document.createElement("price");
            priceXiaoMi.setTextContent("699");
            xiaomi.appendChild(priceXiaoMi);
            
            Element operatorXiaoMi = document.createElement("operator");
            operatorXiaoMi.setTextContent("ChinaNet");
            xiaomi.appendChild(operatorXiaoMi);
            
            telephone.appendChild(xiaomi);
            
            root.appendChild(telephone);
            
            TransformerFactory transFactory = TransformerFactory.newInstance();
            Transformer transFormer = transFactory.newTransformer();
            DOMSource domSource = new DOMSource(document);
            
            //export string
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            transFormer.transform(domSource, new StreamResult(bos));
            xmlStr = bos.toString();
            
            //-------
            //save as file
            File file = new File("TelePhone.xml");
            if(!file.exists()){
                file.createNewFile();
            }
            FileOutputStream out = new FileOutputStream(file);
            StreamResult xmlResult = new StreamResult(out);
            transFormer.transform(domSource, xmlResult);
            //--------
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (TransformerConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return xmlStr;
    }
    
    public void parserXML(String strXML){
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            StringReader sr = new StringReader(strXML);
            InputSource is = new InputSource(sr);
            Document doc = builder.parse(is);
            Element rootElement = doc.getDocumentElement();
            NodeList phones = rootElement.getElementsByTagName("type");
            for (int i = 0; i < phones.getLength(); i++) {
                Node type = phones.item(i);
                String phoneName = ((Element)type).getAttribute("name");
                System.out.println("Phone name = "+phoneName);
                NodeList properties = type.getChildNodes();
                for (int j = 0; j < properties.getLength(); j++) {
                    Node property = properties.item(j);
                    String nodeName = property.getNodeName();
                    if (nodeName.equals("price")) {
                        String price=property.getFirstChild().getNodeValue();
                        System.out.println("price="+price);
                    } else if (nodeName.equals("operator")) {
                        String operator=property.getFirstChild().getNodeValue();
                        System.out.println("operator="+operator);
                    }
                }
            }
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        XMLHandler handler = new XMLHandler();
        String xml = handler.createXML();
        System.out.println(xml);
        handler.parserXML(xml);
    }
}

(3) 要素(Element)とノード(Node)の違い(org.w3c.dom)
Nodeオブジェクトは、文書オブジェクトモデル全体の主要なデータ型であり、 DOM で最も一般的なデータ型 ドキュメント ツリー内の抽象ノードを表す基本オブジェクト。ただし、実際の使用では、Node オブジェクトが直接使用されることはほとんどなく、Node オブジェクトのサブオブジェクトである Element、Attr、Text などが使用されます。
Element オブジェクトは HTML または XML ドキュメント内の要素を表し、Node クラスの主要なサブオブジェクトです。要素には属性を含めることができるため、Element にはその属性にアクセスするためのメソッドがあります。
要素はノードから継承されます。要素は、

...
のように、要素となるための完全な情報を含むノードである必要があります。ただし、ノードは必ずしも要素である必要はなく、要素はノードでなければなりません。
node にはいくつかのサブタイプがあります: Element、Text、Attribute、RootElement、Comment、Namespace など。

2)、SAX


3)、JDOM

4)、DOM4J
(1) はじめに
dom4j は現在、以下で使用されています。 XML 解析 これは、(Hibernate と Sun の JAXM も XML の解析に dom4j を使用します) という点で最高です。これには、統合された XPath サポート、XML スキーマ サポート、大規模ドキュメントまたはストリーミング ドキュメントのサポートなど、基本的な XML ドキュメント表現を超える多くの機能が組み込まれています。 -ベースの処理。
XPATH を使用する場合、jaxen.jar を追加しないと、次のエラーが発生します:

Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)      
at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:164)

(2) サンプルコード:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.xml.sax.InputSource;
public class XMLHandler {
    public XMLHandler() {
        // TODO Auto-generated constructor stub
    }
    
    public String createXML(){
        String strXML = null;
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement("root");
        
        Element phone = root.addElement("TelePhone");
        
        Element nokia = phone.addElement("type");
        nokia.addAttribute("name", "nokia");
        Element price_nokia = nokia.addElement("price");
        price_nokia.addText("599");
        Element operator_nokia = nokia.addElement("operator");
        operator_nokia.addText("CMCC");
        
        Element xiaomi = phone.addElement("type");
        xiaomi.addAttribute("name", "xiaomi");
        Element price_xiaomi = xiaomi.addElement("price");
        price_xiaomi.addText("699");
        Element operator_xiaomi = xiaomi.addElement("operator");
        operator_xiaomi.addText("ChinaNet");
        
        //--------
        StringWriter strWtr = new StringWriter();
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");
        XMLWriter xmlWriter =new XMLWriter(strWtr, format);
        try {
            xmlWriter.write(document);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        strXML = strWtr.toString();
        //--------
        
        //-------
        //strXML=document.asXML();
        //------
        
        //-------------
        File file = new File("TelePhone.xml");  
        if (file.exists()) {  
            file.delete();  
        }  
        try {
            file.createNewFile();
            XMLWriter out = new XMLWriter(new FileWriter(file));  
            out.write(document);  
            out.flush();  
            out.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //--------------
        
        return strXML;
    }
    
    public void parserXML(String strXML){
        SAXReader reader = new SAXReader();
        StringReader sr = new StringReader(strXML);
        InputSource is = new InputSource(sr);
        try {
            Document document = reader.read(is);
            
            Element root = document.getRootElement();
            
            //get element
            List<Element> phoneList = root.elements("TelePhone");
            List<Element> typeList = phoneList.get(0).elements("type");
            for (int i=0;i<typeList.size();i++){
                Element element = typeList.get(i);
                String phoneName = element.attributeValue("name");
                System.out.println("phonename = "+phoneName);
                //get all element
                List<Element> childList = element.elements();
                for (int j=0;j<childList.size();j++){
                    Element e = childList.get(j);
                    System.out.println(e.getName()+"="+e.getText());
                }
            }
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public void parserXMLbyXPath(String strXML){
        SAXReader reader = new SAXReader();
        StringReader sr = new StringReader(strXML);
        InputSource is = new InputSource(sr);
        try {
            Document document = reader.read(is);
            List list = document.selectNodes("/root/TelePhone/type");
            for(int i=0;i<list.size();i++){
                Element e = (Element) list.get(i);
                System.out.println("phonename="+e.attributeValue("name"));
                List list1 = e.selectNodes("./*");
                for(int j=0;j<list1.size();j++){
                    Element e1 = (Element) list1.get(j);
                    System.out.println(e1.getName()+"="+e1.getText());
                }
            }
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        XMLHandler handler = new XMLHandler();
        String strXML=handler.createXML();
        System.out.println(strXML);
        handler.parserXML(strXML);
        System.out.println("-----------");
        handler.parserXMLbyXPath(strXML);
    }
}

5)XPATH
(1) はじめに
XPath は、XML ドキュメント内の情報を検索するための言語です。 XPath は、XML ドキュメント内の要素と属性間を移動するために使用されます。
特定の構文の紹介に関するリファレンス: http://w3school.com.cn/xpath/index.asp

(2) サンプル コード:

import java.io.IOException;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class XMLHandler {
    public XMLHandler() {
        // TODO Auto-generated constructor stub
    }
    
    public void parserXML(String strXML){
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            StringReader sr = new StringReader(strXML);
            InputSource is = new InputSource(sr);
            Document doc = builder.parse(is);
            
            XPathFactory xFactory = XPathFactory.newInstance();
            XPath xpath = xFactory.newXPath();
            XPathExpression expr = xpath.compile("/root/TelePhone/type");
            NodeList phones = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);  
            for (int i = 0; i < phones.getLength(); i++) {
                Node type = phones.item(i);
                String phoneName = ((Element)type).getAttribute("name");
                System.out.println("Phone name = "+phoneName);
                XPathExpression expr1 = xpath.compile("./*");
                NodeList list = (NodeList) expr1.evaluate(type, XPathConstants.NODESET);
                for(int j =0;j<list.getLength();j++){
                    Element e1 = (Element) list.item(j);
                    System.out.println(e1.getNodeName()+"="+e1.getTextContent());
                }
                
            }
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (XPathExpressionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String strXML="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"+
                    "<root>"+
                        "<TelePhone>"+
                            "<type name=\"nokia\">"+
                                "<price>599</price>"+
                                "<operator>CMCC</operator>"+
                            "</type>"+
                            "<type name=\"xiaomi\">"+
                                "<price>699</price>"+
                                "<operator>ChinaNet</operator>"+
                            "</type>"+
                        "</TelePhone>"+
                    "</root>";
        XMLHandler handler = new XMLHandler();
        handler.parserXML(strXML);
    }
}

Java で生成および解析された XML 形式ファイルおよび文字列のサンプル コードの詳細については、関連記事を参照してください。 PHP中国語ウェブサイトをフォローしてください!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

XMLスキーマ:PHPの例 XMLスキーマ:PHPの例 Jul 23, 2025 am 12:27 AM

xmlschemavalidationinphpisachieveveveveveveveveddomdocumentanddomxpathclassesseswiththelibxmlextension.1)loadthexmlfilewithdomdocument.2) useschemavalidatovalidateagain stanxsdssdssdsdssdssdssdscema、throwinganexceptionifvalidations.3)forlargefiles、usexmlreaderforstreamingva

外部RSSフィードをShopifyストアに統合する方法 外部RSSフィードをShopifyストアに統合する方法 Jul 24, 2025 am 02:13 AM

Integrateanexternalrssintososososososososososososososhopify、firstverifythefeed’svalidityandformatting.2.usecustomjavascriptwithapiLikerikerss2jsontofetheddisplaythefeedinaliquidtemplate、asshopifylacksnativeupport.3。

開発者向けのXMLの利点:シンプルさ、柔軟性、および移植性 開発者向けのXMLの利点:シンプルさ、柔軟性、および移植性 Jul 20, 2025 am 03:59 AM

xmlbenefitsdeveloperswithitssimplicity、柔軟性、およびポータビリティ。1)Human-readableformataidsineasydebugging.2)customizabletagsallowforadaptableastructures.3)プラットフォーム依存の依存性を維持する

XMLパフォーマンス:それは良い決断ですか? XMLパフォーマンス:それは良い決断ですか? Jul 15, 2025 am 01:07 AM

xml'suitability-forperformance-criticalapplicationsdependsonsusneeds.1)xml'sparsingoverheadcanbesificant、特にlargefiles.2)Serialization and dearization inxmlaretime-conuming.3)xml'sverbosityleadostessopargeLeargeLegerfilesizes、Impactingnetworkan

XML:よく形成されたXMLを検証しないとどうなりますか? XML:よく形成されたXMLを検証しないとどうなりますか? Jul 21, 2025 am 02:28 AM

notvalidatingwell-formedxmlcanleadtoseriousissues.1)dategegrityerrorsoccur withoutvalidation.2)InteroperabilityississeaSeassySeassyssmaystreptelly.3)セキュリティリスクの装備の継続的なエクスペリティなものbymaliousioutiatiotiationiousiousioty

XML書き込みルール:一般的なエラーを避けてください XML書き込みルール:一般的なエラーを避けてください Jul 21, 2025 am 01:50 AM

CommonXMLerrorsIncludeMismatchedTags、不正、Quotedattributevalues、CaseSensitivityIssues、InvalidCharacters、およびMisusedDeclarations.ToAvoidSeSE:1)usexmLeditorswithsaxhightinghightingingingingandauto-compopredismismismismismismismismismismatidtags.2)

XMLをPython辞書に変換します XMLをPython辞書に変換します Jul 25, 2025 am 01:24 AM

XMLTODICTを使用することは、XMLをPython辞書に変換するための推奨方法です。 1. XMLTODICTライブラリをインストール:PIPINSTALLXMLTODICT; 2。XMLTODICT.PARSE()を使用してXML文字列を辞書に解析し、ネストされた要素、複製タグ、属性を自動的に処理します。 3。ATTR_PREFIXパラメーターを介して属性プレフィックスをカスタマイズできます。サードパーティライブラリをインストールできない場合は、内蔵XML.ETREE.ELEMENTTREEを使用して、再帰関数を介して要素オブジェクトを辞書に変換できますが、リスト、属性、テキストノードを手動で処理する必要があります。空の要素、タイプ変換、名前空間、および大きなファイルを扱うときは、パフォーマンスの問題に注意してください。

簡単なXML操作のためにPHPのsimplexmlライブラリを見てください 簡単なXML操作のためにPHPのsimplexmlライブラリを見てください Jul 27, 2025 am 01:06 AM

Simplexmlistherighttoolfortraightforwardxmlmanipulationinphp、asitconvertsxmlintoeasy-to-navigatephpobjects.1.itallowslowslowsingxmlfromastringorfileusingsimplexml_load_string()orsimplexml_load_file()

See all articles