Heim Backend-Entwicklung XML/RSS-Tutorial Detaillierte Erläuterung des XML-Parsings in Java

Detaillierte Erläuterung des XML-Parsings in Java

Jan 11, 2017 pm 01:00 PM

Lassen Sie uns kurz über die ersten drei Methoden sprechen:

DOM-Methode: Ich persönlich verstehe, dass sie dem XmlDocument von .net ähnelt. Sie ist beim Parsen nicht effizient, beansprucht Speicher und ist nicht dafür geeignet Parsen von großem XML;

SAX-Methode: Ereignisbasiertes Parsen. Wenn ein bestimmter Teil von XML analysiert wird, kann in einer benutzerdefinierten Parsing-Klasse definiert werden, was zu tun ist ; Ich persönlich habe das Gefühl, dass es eine ganz andere Methode ist. Ich frage mich, ob es unter dem .Net-System eine ähnliche Methode gibt.

StAX-Methode: Ich persönlich verstehe die XmlReader-Methode ähnlich wie .net, die sehr effizient ist, weniger Speicher beansprucht und zum Parsen großer XML-Dateien geeignet ist Dieser Artikel stellt hauptsächlich JAXB vor:

import java.util.ArrayList;
 import java.util.List;

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

 public class ConfigParser extends DefaultHandler {
     private String currentConfigSection;

     public SysConfigItem sysConfig;
     public List<InterfaceConfigItem> interfaceConfigList;
     public List<FtpConfigItem> ftpConfigList;
     public List<AdapterConfigItem> adapterConfigList;

     public void startDocument() throws SAXException {
         sysConfig = new SysConfigItem();
         interfaceConfigList = new ArrayList<InterfaceConfigItem>();
         ftpConfigList = new ArrayList<FtpConfigItem>();
         adapterConfigList = new ArrayList<AdapterConfigItem>();
     }

     public void endDocument() throws SAXException {

     }

     public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
         if (qName.equalsIgnoreCase("Item") && attributes.getLength() > 0) {
             if (currentConfigSection.equalsIgnoreCase("SysConfigItem")) {
                 sysConfig = new SysConfigItem(attributes);
             } else if (currentConfigSection.equalsIgnoreCase("InterfaceConfigItems")) {
                 interfaceConfigList.add(new InterfaceConfigItem(attributes));
             } else if (currentConfigSection.equalsIgnoreCase("FtpConfigItems")) {
                 ftpConfigList.add(new FtpConfigItem(attributes));
             } else if (currentConfigSection.equalsIgnoreCase("AdapterConfigItems")) {
                 adapterConfigList.add(new AdapterConfigItem(attributes));
             }
         } else {
             currentConfigSection = qName;
         }
     }

     public void endElement(String uri, String localName, String qName) throws SAXException {

     }

     public void characters(char ch[], int start, int length) throws SAXException {

     }
 }
Nach dem Login kopieren
Das Folgende konzentriert sich auf den bequemsten: JAXB (Java Architecture for XML Binding)
import java.lang.reflect.Field;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.xml.sax.Attributes;
public class ConfigItemBase {
    private static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public ConfigItemBase() {
    }
    /**
     * 目前只支持几种常用类型 如果需要支持其他类型,请修改这里的代码
     * 
     * @param attributes
     */
    public ConfigItemBase(Attributes attributes) {
        Class<?> cls = this.getClass();
        Field[] fields = cls.getDeclaredFields();
        for (Field field : fields) {
            String fieldType = field.getType().getSimpleName();
            for (int i = 0; i < attributes.getLength(); i++) {
                if (attributes.getQName(i).equalsIgnoreCase(field.getName())) {
                    field.setAccessible(true);
                    try {
                        if (fieldType.equalsIgnoreCase("String")) {
                            field.set(this, attributes.getValue(attributes.getQName(i)));
                        } else if (fieldType.equalsIgnoreCase("Integer")) {
                            field.set(this, Integer.valueOf(attributes.getValue(attributes.getQName(i))));
                        } else if (fieldType.equalsIgnoreCase("Double")) {
                            field.set(this, Double.valueOf(attributes.getValue(attributes.getQName(i))));
                        } else if (fieldType.equalsIgnoreCase("Date")) {
                            field.set(this, GetDate(attributes.getValue(attributes.getQName(i))));
                        } else {
                            System.out.println("Warning:Unhandler Field(" + field.getName() + "-" + fieldType + ")");
                        }
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                    break;
                }
            }
        }
    }
    public String toString() {
        String result = "";
        Class<?> cls = this.getClass();
        String classNameString = cls.getName();
        result += classNameString.substring(classNameString.lastIndexOf(&#39;.&#39;) + 1, classNameString.length()) + ":";
        Field[] fields = cls.getDeclaredFields();
        for (Field field : fields) {
            try {
                result += field.getName() + "=" + field.get(this) + ";";
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return result;
    }
    /**
     * 处理时间类型属性(时间格式要求为:yyyy-MM-dd hh:mm:ss)
     * 
     * @param dateString
     * @return
     */
    private static Date GetDate(String dateString) {
        Date date = null;
        try {
            date = dateFormat.parse(dateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}
Nach dem Login kopieren
Hier verwenden wir als Beispiel das komplexere mobile BatchSyncOrderRelationReq-Schnittstellen-XML (ich denke, das reicht im Grunde für jeden aus, der das verstehen kann). Das Nachrichtenformat ist wie folgt (der CDATA-Inhalt in SvcCont ist der Nachrichtentext, also ekelhaft):


Der Dekodierungscode lautet wie folgt:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<InterBOSS>
    <Version>0100</Version>
    <TestFlag>0</TestFlag>
    <BIPType>
        <BIPCode>BIP2B518</BIPCode>
        <ActivityCode>T2101518</ActivityCode>
        <ActionCode>0</ActionCode>
    </BIPType>
    <RoutingInfo>
        <OrigDomain>BOSS</OrigDomain>
        <RouteType>routeType</RouteType>
        <Routing>
            <HomeDomain>XXXX</HomeDomain>
            <RouteValue>routeValue</RouteValue>
        </Routing>
    </RoutingInfo>
    <TransInfo>
        <SessionID>2013041017222313925676</SessionID>
        <TransIDO>2013041017222313925676</TransIDO>
        <TransIDOTime>20130410172223</TransIDOTime>
        <TransIDH></TransIDH>
        <TransIDHTime></TransIDHTime>
    </TransInfo>
    <SNReserve>
        <TransIDC></TransIDC>
        <ConvID></ConvID>
        <CutOffDay></CutOffDay>
        <OSNTime></OSNTime>
        <OSNDUNS></OSNDUNS>
        <HSNDUNS></HSNDUNS>
        <MsgSender></MsgSender>
        <MsgReceiver></MsgReceiver>
        <Priority></Priority>
        <ServiceLevel></ServiceLevel>
        <SvcContType></SvcContType>
    </SNReserve>
    <Response>
        <RspType>rspType</RspType>
        <RspCode>rspCode</RspCode>
        <RspDesc>rspDesc</RspDesc>
    </Response>
    <SvcCont><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<batchSyncOrderRelationReq>
    <msgTransactionID>210001BIP2B518130410172223651627</msgTransactionID>
    <reqNum>2</reqNum>
    <reqBody>
        <oprNumb>210001BIP2B518130410172224341871</oprNumb>
        <subscriptionInfo>
            <oprTime>oprTime1</oprTime>
            <actionID>actionId1</actionID>
            <brand>brand1</brand>
            <effTime>effTime1</effTime>
            <expireTime>expireTime1</expireTime>
            <feeUser_ID>feeUserId1</feeUser_ID>
            <destUser_ID>destUserId1</destUser_ID>
            <actionReasonID>actionId1</actionReasonID>
            <servType>servType1</servType>
            <subServType>subServType1</subServType>
            <SPID>spId1</SPID>
            <SPServID>spServId1</SPServID>
            <accessMode>accessMode1</accessMode>
            <servParamInfo>
                <para_num>0</para_num>
                <para_info>
                    <para_name></para_name>
                    <para_value></para_value>
                </para_info>
            </servParamInfo>
            <feeType>feeType1</feeType>
        </subscriptionInfo>
    </reqBody>
    <reqBody>
        <oprNumb>210001BIP2B518130410172224420909</oprNumb>
        <subscriptionInfo>
            <oprTime>oprTime2</oprTime>
            <actionID>actionId2</actionID>
            <brand>brand2</brand>
            <effTime>effTime2</effTime>
            <expireTime>expireTime2</expireTime>
            <feeUser_ID>feeUserId2</feeUser_ID>
            <destUser_ID>destUserId2</destUser_ID>
            <actionReasonID>actionId2</actionReasonID>
            <servType>servType2</servType>
            <subServType>subServType2</subServType>
            <SPID>spId2</SPID>
            <SPServID>spServId2</SPServID>
            <accessMode>accessMode2</accessMode>
            <servParamInfo>
                <para_num>0</para_num>
                <para_info>
                    <para_name></para_name>
                    <para_value></para_value>
                </para_info>
            </servParamInfo>
            <feeType>feeType2</feeType>
        </subscriptionInfo>
    </reqBody>
</batchSyncOrderRelationReq>]]></SvcCont>
</InterBOSS>
Nach dem Login kopieren

@XmlRootElement(name = "batchSyncOrderRelationReq")
 @XmlAccessorType(XmlAccessType.FIELD)
 public class BatchSyncOrderRelationReq extends BossMessage<BatchSyncOrderRelationReq> {

     @XmlElement(name = "msgTransactionID")
     private String msgTransactionId = "";

     @XmlElement(name = "reqNum")
     private String reqNum = "";

     @XmlElement(name = "reqBody")
     private List<BatchSyncOrderRelationReqBody> reqBodyList;

     public BatchSyncOrderRelationReq() {

     }

     public String getMsgTransactionId() {
         return this.msgTransactionId;
     }

     public void setMsgTransactionId(String msgTransactionId) {
         this.msgTransactionId = msgTransactionId;
     }

     public String getReqNum() {
         return this.reqNum;
     }

     public void setReqNum(String reqNum) {
         this.reqNum = reqNum;
     }

     public List<BatchSyncOrderRelationReqBody> getReqBodyList() {
         return this.reqBodyList;
     }

     public void setReqBodyList(List<BatchSyncOrderRelationReqBody> reqBodyList) {
         this.reqBodyList = reqBodyList;
     }

     @Override
     public BatchSyncOrderRelationReq Deserialized(String interBossXmlContent) throws BusinessException {
         try {
             // deserialized for head
             JAXBContext jaxbCxt4Head = JAXBContext.newInstance(MessageHead.class);
             Unmarshaller unmarshaller4Head = jaxbCxt4Head.createUnmarshaller();
             MessageHead head = (MessageHead) unmarshaller4Head.unmarshal(new StringReader(interBossXmlContent));

             // deserialized for SyncOrderRelationReq body
             JAXBContext jaxbCxt4Body = JAXBContext.newInstance(BatchSyncOrderRelationReq.class);
             Unmarshaller unmarshaller4Body = jaxbCxt4Body.createUnmarshaller();
             BatchSyncOrderRelationReq batchSyncOrderRelationReq = (BatchSyncOrderRelationReq) unmarshaller4Body.unmarshal(new StringReader(head.getSvcCont().trim()));
             batchSyncOrderRelationReq.setHead(head);

             return batchSyncOrderRelationReq;
         } catch (JAXBException e) {
             throw new BusinessException("SyncOrderRelationReq.Deserialized() Error!(" + interBossXmlContent + ")", e);
         }
     }

 }
Nach dem Login kopieren
@XmlAccessorType(XmlAccessType.FIELD)
public class BatchSyncOrderRelationReqBody {
    @XmlElement(name = "oprNumb")
    private String oprNumb = "";
    @XmlElement(name = "subscriptionInfo")
    private SubscriptionInfo subscriptionInfo;

    public BatchSyncOrderRelationReqBody(){

    }
    public BatchSyncOrderRelationReqBody(String oprNumb, SubscriptionInfo subscriptionInfo) {
        this.oprNumb = oprNumb;
        this.subscriptionInfo = subscriptionInfo;
    }
    public String getOprNumb() {
        return this.oprNumb;
    }
    public void setOprNumb(String oprNumb) {
        this.oprNumb = oprNumb;
    }
    public SubscriptionInfo getSubscriptionInfo() {
        return this.subscriptionInfo;
    }
    public void setSubscriptionInfo(SubscriptionInfo subscriptionInfo) {
        this.subscriptionInfo = subscriptionInfo;
    }
}
Nach dem Login kopieren
Ausführlichere Erläuterungen zur XML-Analyse in Java und verwandte Artikel finden Sie auf der chinesischen PHP-Website !
@XmlAccessorType(XmlAccessType.FIELD)
public class SubscriptionInfo {

    @XmlElement(name = "oprTime")
    private String oprTime = "";
    @XmlElement(name = "actionID")
    private String actionId = "";
    @XmlElement(name = "brand")
    private String brand = "";
    @XmlElement(name = "effTime")
    private String effTime = "";
    @XmlElement(name = "expireTime")
    private String expireTime = "";
    @XmlElement(name = "feeUser_ID")
    private String feeUserId = "";
    @XmlElement(name = "destUser_ID")
    private String destUserId = "";
    @XmlElement(name = "actionReasonID")
    private String actionReasonId = "";
    @XmlElement(name = "servType")
    private String servType = "";
    @XmlElement(name = "subServType")
    private String subServType = "";
    @XmlElement(name = "SPID")
    private String spId = "";
    @XmlElement(name = "SPServID")
    private String spServId = "";
    @XmlElement(name = "accessMode")
    private String accessMode = "";
    @XmlElement(name = "feeType")
    private String feeType = "";
    public SubscriptionInfo() {
    }

    public SubscriptionInfo(
            String oprTime,
            String actionId,
            String brand,
            String effTime,
            String expireTime,
            String feeUserId,
            String destUserId,
            String actionReasonId,
            String servType,
            String subServType,
            String spId,
            String spServId,
            String accessMode,
            String feeType) {
        this.oprTime = oprTime;
        this.actionId = actionId;
        this.brand = brand;
        this.effTime = effTime;
        this.expireTime = expireTime;
        this.feeUserId = feeUserId;
        this.destUserId = destUserId;
        this.actionReasonId = actionReasonId;
        this.servType = servType;
        this.subServType = subServType;
        this.spId = spId;
        this.spServId = spServId;
        this.accessMode = accessMode;
        this.feeType = feeType;
    }
    public String getOprTime() {
        return this.oprTime;
    }
    public void setOprTime(String oprTime) {
        this.oprTime = oprTime;
    }
    public String getActionId() {
        return this.actionId;
    }
    public void setActionId(String actionId) {
        this.actionId = actionId;
    }
    public String getBrand() {
        return this.brand;
    }
    public void setBrand(String brand) {
        this.brand = brand;
    }
    public String getEffTime() {
        return this.effTime;
    }
    public void setEffTime(String effTime) {
        this.effTime = effTime;
    }
    public String getExpireTime() {
        return this.expireTime;
    }
    public void setExpireTime(String expireTime) {
        this.expireTime = expireTime;
    }
    public String getFeeUserId() {
        return this.feeUserId;
    }
    public void setFeeUserId(String feeUserId) {
        this.feeUserId = feeUserId;
    }
    public String getDestUserId() {
        return this.destUserId;
    }
    public void setDestUserId(String destUserId) {
        this.destUserId = destUserId;
    }
    public String getActionReasonId() {
        return this.actionReasonId;
    }
    public void setActionReasonId(String actionReasonId) {
        this.actionReasonId = actionReasonId;
    }
    public String getServType() {
        return this.servType;
    }
    public void setServType(String servType) {
        this.servType = servType;
    }
    public String getSubServType() {
        return this.subServType;
    }
    public void setSubServType(String subServType) {
        this.subServType = subServType;
    }
    public String getSpId() {
        return this.spId;
    }
    public void setSpId(String spId) {
        this.spId = spId;
    }
    public String getSpServId() {
        return this.spServId;
    }
    public void setSpServId(String spServId) {
        this.spServId = spServId;
    }
    public String getAccessMode() {
        return this.accessMode;
    }
    public void setAccessMode(String accessMode) {
        this.accessMode = accessMode;
    }
    public String getFeeType() {
        return this.feeType;
    }
    public void setFeeType(String feeType) {
        this.feeType = feeType;
    }
}
Nach dem Login kopieren
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ist die Konversionsgeschwindigkeit beim Umwandeln von XML in PDF auf Mobiltelefon schnell? Ist die Konversionsgeschwindigkeit beim Umwandeln von XML in PDF auf Mobiltelefon schnell? Apr 02, 2025 pm 10:09 PM

Die Geschwindigkeit der mobilen XML zu PDF hängt von den folgenden Faktoren ab: der Komplexität der XML -Struktur. Konvertierungsmethode für mobile Hardware-Konfiguration (Bibliothek, Algorithmus) -Codierungsoptimierungsmethoden (effiziente Bibliotheken, Optimierung von Algorithmen, Cache-Daten und Nutzung von Multi-Threading). Insgesamt gibt es keine absolute Antwort und es muss gemäß der spezifischen Situation optimiert werden.

Wie konvertiere ich XML -Dateien in PDF auf Ihrem Telefon? Wie konvertiere ich XML -Dateien in PDF auf Ihrem Telefon? Apr 02, 2025 pm 10:12 PM

Mit einer einzigen Anwendung ist es unmöglich, XML -zu -PDF -Konvertierung direkt auf Ihrem Telefon zu vervollständigen. Es ist erforderlich, Cloud -Dienste zu verwenden, die in zwei Schritten erreicht werden können: 1. XML in PDF in der Cloud, 2. Zugriff auf die konvertierte PDF -Datei auf dem Mobiltelefon konvertieren oder herunterladen.

Wie konvertieren Sie XML in Ihr Telefon in PDF? Wie konvertieren Sie XML in Ihr Telefon in PDF? Apr 02, 2025 pm 10:18 PM

Es ist nicht einfach, XML direkt auf Ihr Telefon in PDF umzuwandeln, kann jedoch mit Hilfe von Cloud -Diensten erreicht werden. Es wird empfohlen, eine leichte mobile App zu verwenden, um XML -Dateien hochzuladen und generierte PDFs zu empfangen und sie mit Cloud -APIs zu konvertieren. Cloud -APIs verwenden serverlose Computerdienste, und die Auswahl der richtigen Plattform ist entscheidend. Bei der Behandlung von XML -Parsen und PDF -Generation müssen Komplexität, Fehlerbehebung, Sicherheit und Optimierungsstrategien berücksichtigt werden. Der gesamte Prozess erfordert, dass die Front-End-App und die Back-End-API zusammenarbeiten, und es erfordert ein gewisses Verständnis einer Vielzahl von Technologien.

So öffnen Sie Web.xml So öffnen Sie Web.xml Apr 03, 2025 am 06:51 AM

Um eine Web.xml -Datei zu öffnen, können Sie die folgenden Methoden verwenden: Verwenden Sie einen Texteditor (z.

Empfohlenes XML -Formatierungswerkzeug Empfohlenes XML -Formatierungswerkzeug Apr 02, 2025 pm 09:03 PM

XML -Formatierungs -Tools können Code nach Regeln eingeben, um die Lesbarkeit und das Verständnis zu verbessern. Achten Sie bei der Auswahl eines Tools auf die Anpassungsfunktionen, den Umgang mit besonderen Umständen, die Leistung und die Benutzerfreundlichkeit. Zu den häufig verwendeten Werkzeugtypen gehören Online-Tools, IDE-Plug-Ins und Befehlszeilen-Tools.

Gibt es eine mobile App, die XML in PDF umwandeln kann? Gibt es eine mobile App, die XML in PDF umwandeln kann? Apr 02, 2025 pm 08:54 PM

Eine Anwendung, die XML direkt in PDF konvertiert, kann nicht gefunden werden, da es sich um zwei grundlegend unterschiedliche Formate handelt. XML wird zum Speichern von Daten verwendet, während PDF zur Anzeige von Dokumenten verwendet wird. Um die Transformation abzuschließen, können Sie Programmiersprachen und Bibliotheken wie Python und ReportLab verwenden, um XML -Daten zu analysieren und PDF -Dokumente zu generieren.

So öffnen Sie das XML -Format So öffnen Sie das XML -Format Apr 02, 2025 pm 09:00 PM

Verwenden Sie die meisten Texteditoren, um XML -Dateien zu öffnen. Wenn Sie eine intuitivere Baumanzeige benötigen, können Sie einen XML -Editor verwenden, z. B. Sauerstoff XML -Editor oder XMLSPY. Wenn Sie XML -Daten in einem Programm verarbeiten, müssen Sie eine Programmiersprache (wie Python) und XML -Bibliotheken (z. B. XML.etree.elementtree) verwenden, um zu analysieren.

XML Online -Formatierung XML Online -Formatierung Apr 02, 2025 pm 10:06 PM

XML Online-Format-Tools organisieren automatisch den chaotischen XML-Code in einfach zu lesenden und verwalteten Formaten. Durch die Parsen des Syntaxbaums von XML und die Anwendung von Formatierungsregeln optimieren diese Tools die Struktur des Codes und verbessern die Wartbarkeit und die Effizienz der Teamarbeit.

See all articles