"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إلغاء تنظيم XML باستخدام السمات الديناميكية في Go؟

كيفية إلغاء تنظيم XML باستخدام السمات الديناميكية في Go؟

تم النشر بتاريخ 2024-11-18
تصفح:307

How to Unmarshal XML with Dynamic Attributes in Go?

Golang: Unmarshalling XML مع السمات الديناميكية

المقدمة:
في Go، يوفر التشفير/XML طريقة فعالة ومتعددة الاستخدامات للتعامل مع بيانات XML. ومع ذلك، عند التعامل مع عناصر XML التي تمتلك سمات ديناميكية، يصبح إلغاء التنظيم أمرًا صعبًا بسبب العدد غير المعروف وأنواع السمات الموجودة.

سؤال:
كيف يمكنك إلغاء تنظيم علامات XML باستخدام السمات الديناميكية في Go عندما لا تتوقع السمات الدقيقة التي ستكون تمت مواجهته؟

الإجابة:
قبل أواخر عام 2017، لم يكن هذا مدعومًا بشكل مباشر في إلغاء تنظيم XML الخاص بـ Go. ومع ذلك، مع التقدم في حزمة التشفير/xml، تم تنفيذ هذه الوظيفة.

لإلغاء تنظيم علامات XML ذات السمات الديناميكية، يمكنك استخدام بناء الجملة التالي:

type MyStruct struct {
    Attributes []xml.Attr `xml:",any,attr"`
}

إليك مثال لتوضيح كيفية العمل:

package main

import (
    "encoding/xml"
    "fmt"
)

func main() {
    type MyStruct struct {
        Attributes []xml.Attr `xml:",any,attr"`
    }

    data := ``

    var v MyStruct

    if err := xml.Unmarshal([]byte(data), &v); err != nil {
        panic(err)
    }

    fmt.Println(v.Attributes)
}

في هذا المثال، يحدد نوع MyStruct حقلاً يسمى السمات. تقوم علامة xml:"...,any,attr" بتوجيه أداة إلغاء التنظيم إلى تعيين أي سمات XML لهذا الحقل كشرائح xml.Attr.

عندما يواجه أداة إلغاء التنظيم بيانات XML المتوفرة في متغير البيانات، فإنها يقوم بإلغاء تنظيم السمات غير المعروفة (ATTR1 وATTR2) بنجاح في حقل السمات الخاص بالبنية v. يسمح هذا بالمعالجة الديناميكية لعناصر XML بمجموعات سمات مختلفة.

لاحظ أن هذه الميزة تتطلب إصدار Go 1.9 أو إصدار أحدث.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3