سؤال

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

والخطوة التالية هي كيفية تحديد أي أكس العقد التابعة عقدة معينة يمكن أن يكون. على سبيل المثال. وأود أن اختيار عقدة لديها minOccurs = "0"، maxOccurs = "غير محدود" لأحد أبنائها. وأود أن تكون قادرة على تحديد كل شيء عن هذا الطفل، خصائصها، اسمها، نوع قيمته، وما إلى ذلك.

لإعطاء مزيد من السياق حول الوضع، وأنا أعمل على أداة تسمح للمستخدمين لتحرير ملفات XML في بيئة أكثر ملاءمة للمستخدمين. على سبيل المثال لانهم يمكن إضافة حساب جديد إلى العقدة "حساب ديسيبل" وأنها ترى أن العقدة الوحيدة المتاحة هي عقدة حساب. بعد ذلك، عندما حاول إضافة الأطفال إلى العقدة الحساب وسوف الاختيارات يكون اسم عقدة (مطلوب)، عقدة كلمة السر (مطلوب)، إعدادات عقدة (اختياري)، الخ. كيف يمكنني تحديد برمجيا ما الأطفال ديها المتاحة العقدة حساب ل وماذا سمات والإعدادات على هؤلاء الأطفال؟

وهذا هو في C # 2.0 مع Framework 2.0.

في خلاصة القول، الطبقات التي يمكنني استخدامها لقراءة المخطط وتحليل ذلك للحصول على معلومات مفيدة لإنشاء أكس؟ في بلدي سذاجة كان آمل أنه منذ كان XSD أكس في حد ذاته لن يكون هناك نوعا من طراز DOM أن أتمكن من اجتياز طريق.

وأود أن يكون هذا يقتصر على برنامجي حتى لا استخدام أدوات خارجية مثل OxygenXml، VS، xsd.exe، وما إلى ذلك.

هل كانت مفيدة؟

المحلول

وهذا يبدو وكأنه ما تريد النسخ المتماثل وظائف وراء التحسس XML في معظم المحررين XML جيد للقيام به. أي قراءة مخطط XML والعمل على العناصر التي وسمات يمكن أن تأتي لاحقا.

ولقد فعلنا شيئا من هذا القبيل جدا في مشروع عملنا على منذ بعض الوقت. لانتاج شيء يعمل معظم الوقت هناك الكثير من العمل، إلى شيء المنتج الذي يعمل في كل وقت هو الكثير من العمل!

وفي الأساس تحتاج إلى تحميل XSD (كائنات XmlSchema في صافي تسمح لك ان تفعل هذا). ولكن طراز كائن SOM يعرضون هو الخام جدا، لذلك عليك القيام به الكثير من العمل لتفسير ذلك. إذا كنت تجاهل مفاهيم مثل مجموعة الاستبدال، تمديد complexType، مخططات الحرباء وnamesapces، يجب أن تكون قادرا على التنقل في SOM بسهولة معقول.

وأنت القادم بحاجة لمعرفة أين أنت في وثيقة XML مع بالنسبة إلى المخطط الخاص بك. بمجرد أن تعرف وأنت في SOM ثم يمكنك البدء في العمل من الخيارات المتاحة.

لقيام بذلك بشكل صحيح هو 1000 "من خطوط رمز و4-12 أسابيع رجل أعمال. قد تكون قادرة على الحصول على شيء أساسي معا في غضون بضعة أسابيع؟

نصائح أخرى

ولقد كان ينزف عيني مع مستندات MSDN واعتقد انني التقطت رائحة. تحميل المخطط باستخدام XmlSchema.Read وترجمة عليه. والخاصية عناصر تحتوي على مجموعة من العناصر "أعلى مستوى". سيكون لديك لترميز ثابت للاسم مؤهل للعنصر الجذر أو شيء من هذا. ثم هذا كل شيء. لم أجد كيفية العثور على "محتويات" تحت عنصر مخطط معين حتى الان.

تحرير: لقد وجدت بعض أكثر من المسارات للذهاب لكنه ما زال لا اضحة وضوح الشمس. XmlSchemaElements تحتوي على خاصية نوع المخطط. هذا هو إما بسيطة أو معقدة. الأنواع المعقدة في مخطط XML يمكن أن يكون لها سمات، وتسلسل، والجماعات، وما إلى ذلك تسلسل تحتوي على خاصية تسمى الجسيمات التي يمكن أن تكون عنصرا. ويكرر دورة. ولكن أعتقد أن الجزء الصعب في تنفيذ يكون للتأكد من تغطية جميع الحالات المحتملة (نوع بسيط، نوع معقد مع سمة نوع معقد مع سمة وعناصر، ملحقات، كامل كوخ).

وتحرير: استخدام خاصية عنصر الكائن XmlSchema للحصول على XmlSchemaElement. استخدام خاصية SchemaType وXmlSchemaElement للحصول نوع بسيط أو معقد. استخدام خاصية السمة XmlSchemaComplexType في الحصول على سمات أو ContentModel للحصول على "محتوى بسيط '/' محتوى معقد" أو الجسيمات للحصول على 'تسلسل' / 'اختيار' / 'الجميع'. في الأساس الكثير من السفر إلى أسفل خصائص وفحص أنواع والصب الأجسام اليسار واليمين وفحص كافة الترتيبات المحتملة للكائنات XSD. لإنشاء مكتبة ستكون طويلة ومرهقة وعرضة للخطأ. وهذا هو الحال مع مخططات XML، مع تدس أنا لا أريد حتى أن تبدأ التفكير. نجاح باهر، هي مخططات XML اللازمة ولكن لماذا يجب عليهم أن يكونوا شر ذلك.

ويمكنك استخدام أداة طرف ثالث مثل XMLSPY ( صلة ). انها سوف تجعل أكس وهمية من XSD أو العكس بالعكس.

وهناك دوار حقا (ولكن مجانا) الطريقة التي يمكن أن تفعله مع الأدوات. NET الموجودة على جهازك سيكون لاستخدام xsd.exe (<لأ href = "http://msdn.microsoft.com/en-us/ مكتبة / x6c1kb0s (VS.71) .ASPX "يختلط =" نوفولو noreferrer "> رابط ) لتوليد الكيان الكائنات التي يحدد المخطط الخاص بك باستخدام ما يلي:

xsd /classes /language:CS XSDSchemaFile.xsd

وبعد ذلك عندما يكون لديك الكائنات، وتحميلها في مشروع وتسلسل منهم. يمكنك ملء الخصائص وكذا إذا كنت ترغب في إضافة بعض بيانات وهمية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top