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