検索

最初の 3 つのメソッドについて簡単に説明します。

DOM メソッド: 個人的な理解は .net の XmlDocument に似ていますが、これは解析時に効率が悪く、メモリを消費し、大規模な XML の解析には適していません。 -ベースの解析、XML の特定の部分が解析されると、特定のイベントがトリガーされる、カスタム解析クラスでイベントがトリガーされたときに何を行うかを定義できます。 .Net システムで可能かどうかはわかりません。同様の方法はありますか?

StAX メソッド: 個人的には、.net に似た XmlReader メソッドが非常に効率的で、メモリ使用量が少なく、大規模な XML の解析に適していると理解しています

ただし、この記事では主に SAX メソッドを紹介します。 JAXB であり、メイン コードのみがここに掲載されています:

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 {

     }
 }
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;
    }
}

以下は最も便利なものに焦点を当てています: JAXB (Java Architecture for XML Binding)

ここでは例として、より複雑なモバイル BatchSyncOrderRelationReq インターフェイス XML を使用します (誰もがそう思うと思います)これを理解できる人は基本的に十分です)、メッセージの形式は次のとおりです (SvcCont の CDATA コンテンツはメッセージ本文なので、とても不快です):

<?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>

デコード コードは次のとおりです:

@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);
         }
     }

 }
@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;
    }
}
@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;
    }
}

XML 解析の詳細については、 Java および関連記事は、PHP の中国語 Web サイトに注目してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
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の最適化は、構造をシンプルに保つことで、ページング、キャッシュ、および保持することで実現できます。この知識を理解して適用することにより、コンテンツを効果的に管理および配布できます。

XMLのRSS:タグ、属性、および構造のデコードXMLのRSS:タグ、属性、および構造のデコードApr 24, 2025 am 12:09 AM

RSSは、コンテンツを公開および購読するために使用されるXMLベースの形式です。 RSSファイルのXML構造には、ルート要素、要素、および複数の要素が含まれ、それぞれがコンテンツエントリを表します。 XMLパーサーを介してRSSファイルを読み取り、解析すると、ユーザーは最新のコンテンツを購読して取得できます。

RSSにおけるXMLの利点:技術的なディープダイビングRSSにおけるXMLの利点:技術的なディープダイビングApr 23, 2025 am 12:02 AM

XMLには、RSSの構造化データ、スケーラビリティ、クロスプラットフォームの互換性、解析検証の利点があります。 1)構造化されたデータにより、コンテンツの一貫性と信頼性が保証されます。 2)スケーラビリティにより、コンテンツのニーズに合わせてカスタムタグを追加できます。 3)クロスプラットフォームの互換性により、さまざまなデバイスでシームレスに動作します。 4)分析および検証ツールは、フィードの品質と完全性を確保します。

XMLのRSS:コンテンツシンジケーションのコアを発表しますXMLのRSS:コンテンツシンジケーションのコアを発表しますApr 22, 2025 am 12:08 AM

XMLでのRSSの実装は、構造化されたXML形式を使用してコンテンツを整理することです。 1)RSSは、チャネル情報やプロジェクトリストなどの要素を含むデータ交換形式としてXMLを使用します。 2)RSSファイルを生成する場合、コンテンツは仕様に従って整理し、サブスクリプションのためにサーバーに公開する必要があります。 3)RSSファイルは、読者またはプラグインを介してサブスクライブして、コンテンツを自動的に更新できます。

基本を超えて:高度なRSSドキュメント機能基本を超えて:高度なRSSドキュメント機能Apr 21, 2025 am 12:03 AM

RSSの高度な機能には、コンテンツネームスペース、拡張モジュール、条件付きサブスクリプションが含まれます。 1)コンテンツネームスペースはRSS機能を拡張します。2)dublincoreやiTunesなどの拡張モジュールを拡張してメタデータを追加します。これらの関数は、情報収集の効率を改善するためにXML要素と属性を追加することにより実装されます。

XMLバックボーン:RSSフィードが構造化される方法XMLバックボーン:RSSフィードが構造化される方法Apr 20, 2025 am 12:02 AM

rssfeedsusexmltoStructurecontentupdates.1)xmlprovidesahierararchStructurefordata.2)theelementDefinesthefeed'sidentityandContainesements.3)letentionEntentividualContentPieces.4)

RSS&XML:Webコンテンツのダイナミックデュオを理解するRSS&XML:Webコンテンツのダイナミックデュオを理解するApr 19, 2025 am 12:03 AM

RSSとXMLは、Webコンテンツ管理のためのツールです。 RSSはコンテンツの公開と購読に使用され、XMLはデータの保存と転送に使用されます。コンテンツの公開、サブスクリプション、および更新プッシュで動作します。使用法の例には、RSS公開ブログ投稿やXML保存本情報が含まれます。

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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists

SecLists

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

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版

SublimeText3 中国語版

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

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール